view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/impl/DefaultNodePath.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungle.store.impl;


import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;

import java.util.Iterator;

public class DefaultNodePath implements NodePath {
    private final List<Integer> path;

    public static void main(String args[]) {
        DefaultNodePath p = new DefaultNodePath();
        p = p.add(1).add(2).add(3).add(4);
        System.out.println(p.toString());
    }

    public DefaultNodePath() {
        path = new List<Integer>().addLast(-1);
    }

    private DefaultNodePath(List<Integer> path) {
        this.path = path;
    }

    @Override
    public Iterator<Integer> iterator() {
        return path.iterator();
    }

    @Override
    public DefaultNodePath add(int pos) {
        List<Integer> newPath = path.addLast(pos);
        return new DefaultNodePath(newPath);
    }

    @Override
    public Pair<Integer, NodePath> pop() {
        Integer head = path.head();
        List<Integer> tail = path.deleteHead();
        return new Pair<>(head, new DefaultNodePath(tail));
    }

    @Override
    public Pair<Integer, NodePath> last() {
        Integer last = path.head();
        List<Integer> list = path.deleteHead();
        return new Pair<>(last, new DefaultNodePath(list));
    }

    @Override
    public String toString() {
        return path.toString();
    }

    @Override
    public int size() {
        return path.length();
    }


    //PATHの一番後ろを取り除いたPATHを新しく作って返す
// EXAMPLE <0,0,3> → <0,0>
    @Override
    public NodePath tail() {
        List<Integer> tail = path.deleteLast();
        return new DefaultNodePath(tail);
    }

    public List<DefaultNodePath> inits() {
        List<DefaultNodePath> paths = new List<>();
        List<Integer> coursePath = new List<>();
        for (Integer tmpPath : path) {
            List<Integer> tmp = coursePath.addLast(tmpPath);
            paths = paths.addLast(new DefaultNodePath(tmp));
            coursePath = tmp;
        }
        return paths;
    }
}