Mercurial > hg > Members > kazuma > jungle-ormapper
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; } }