43
|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
|
|
2
|
|
3 import java.util.Iterator;
|
|
4
|
44
|
5 import fj.F;
|
43
|
6 import fj.data.List;
|
|
7
|
|
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
|
|
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
|
|
10
|
|
11 public class DefaultNodePath implements NodePath
|
|
12 {
|
|
13 private final List<Integer> path;
|
|
14
|
|
15 public static void main(String _args[])
|
|
16 {
|
|
17 DefaultNodePath p = new DefaultNodePath();
|
|
18 p = p.add(1).add(2).add(3).add(4);
|
|
19 System.out.println(p.toString());
|
|
20 }
|
|
21
|
|
22 public DefaultNodePath()
|
|
23 {
|
44
|
24 path = List.list(-1);
|
43
|
25 }
|
|
26
|
|
27 private DefaultNodePath(List<Integer> _path)
|
|
28 {
|
|
29 path = _path;
|
|
30 }
|
|
31
|
|
32 @Override
|
|
33 public Iterator<Integer> iterator()
|
|
34 {
|
|
35 return path.iterator();
|
|
36 }
|
|
37
|
|
38 @Override
|
|
39 public DefaultNodePath add(int _pos)
|
|
40 {
|
|
41 List<Integer> newPath = path.snoc(_pos);
|
|
42 return new DefaultNodePath(newPath);
|
|
43 }
|
|
44
|
|
45 @Override
|
|
46 public Pair<Integer, NodePath> pop()
|
|
47 {
|
|
48 Integer head = path.head();
|
|
49 List<Integer> tail = path.tail();
|
|
50
|
|
51 return new Pair<Integer,NodePath>(head,new DefaultNodePath(tail));
|
|
52 }
|
|
53
|
|
54 @Override
|
|
55 public String toString()
|
|
56 {
|
|
57 return path.toString();
|
|
58 }
|
|
59
|
|
60 @Override
|
|
61 public int size()
|
|
62 {
|
|
63 return path.length();
|
|
64 }
|
44
|
65
|
|
66 public List<DefaultNodePath> inits()
|
|
67 {
|
|
68 List<List<Integer>> inits = path.inits();
|
|
69 inits = inits.filter(new F<List<Integer>,Boolean>(){
|
|
70 @Override
|
|
71 public Boolean f(List<Integer> _init){
|
|
72 return _init.length() != 0;
|
|
73 }
|
|
74 });
|
|
75
|
|
76 return inits.map(new F<List<Integer>,DefaultNodePath>(){
|
|
77 @Override
|
|
78 public DefaultNodePath f(List<Integer> _path){
|
|
79 return new DefaultNodePath(_path);
|
|
80 }
|
|
81 });
|
|
82 }
|
98
|
83
|
|
84 @Override
|
|
85 public NodePath tail() {
|
|
86 List<Integer> tail = path.reverse();
|
|
87 tail = tail.tail().reverse();
|
|
88 return new DefaultNodePath(tail);
|
|
89 }
|
43
|
90 }
|