Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNodePath.java @ 98:95000ff9064d
Create Query
author | one |
---|---|
date | Tue, 09 Sep 2014 16:23:01 +0900 |
parents | 449d67be0886 |
children | f9a0e7069811 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl; import java.util.Iterator; import fj.F; import fj.data.List; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; 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 = List.list(-1); } private DefaultNodePath(List<Integer> _path) { path = _path; } @Override public Iterator<Integer> iterator() { return path.iterator(); } @Override public DefaultNodePath add(int _pos) { List<Integer> newPath = path.snoc(_pos); return new DefaultNodePath(newPath); } @Override public Pair<Integer, NodePath> pop() { Integer head = path.head(); List<Integer> tail = path.tail(); return new Pair<Integer,NodePath>(head,new DefaultNodePath(tail)); } @Override public String toString() { return path.toString(); } @Override public int size() { return path.length(); } public List<DefaultNodePath> inits() { List<List<Integer>> inits = path.inits(); inits = inits.filter(new F<List<Integer>,Boolean>(){ @Override public Boolean f(List<Integer> _init){ return _init.length() != 0; } }); return inits.map(new F<List<Integer>,DefaultNodePath>(){ @Override public DefaultNodePath f(List<Integer> _path){ return new DefaultNodePath(_path); } }); } @Override public NodePath tail() { List<Integer> tail = path.reverse(); tail = tail.tail().reverse(); return new DefaultNodePath(tail); } }