annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 184:d2b710337eaa

change TreeMap
author tatsuki
date Sun, 29 Mar 2015 23:29:27 +0900
parents 066d9c5758dc
children 209df7faa37c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
2
98
95000ff9064d Create Query
one
parents: 97
diff changeset
3 import java.util.Iterator;
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
4 import java.util.Optional;
174
one
parents: 173
diff changeset
5
one
parents: 173
diff changeset
6 import fj.Ord;
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
7 import fj.data.List;
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.tatsuki.TreeMap.TreeMap;
174
one
parents: 173
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
110
cf17350a2415 traverse find args change Query
one
parents: 107
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
169
3cd075a445bf create parent index order o(n^2) → log(n)
one
parents: 166
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexCreater;
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
15
100
9a7b7af838e0 add index TreeNodeEditor
one
parents: 99
diff changeset
16 public class InterfaceTraverser {
124
75ba2f2d6ea3 searchQueryTest add index
one
parents: 122
diff changeset
17
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
18 TreeNode root;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
19 TreeMap<String, TreeMap<String, List<TreeNode>>> indexList;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
20 ParentIndex parentIndex;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
21 boolean parentUpdateFlag;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
22 boolean useIndex;
154
b8cef4b640a3 update index for commit
one
parents: 153
diff changeset
23
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
24 public InterfaceTraverser(TreeNode root, boolean indexFlag) {
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
25 this(root, new TreeMap<>(), new ParentIndex(), indexFlag);
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
26 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
27
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
28 public InterfaceTraverser(TreeNode root, TreeMap<String, TreeMap<String, List<TreeNode>>> index,
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
29 ParentIndex parentIndex, boolean useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
30 this.root = root;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
31 this.indexList = index;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
32 this.parentIndex = parentIndex;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
33 if (parentIndex.isEmpty())
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
34 parentUpdateFlag = true;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
35 else
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
36 parentUpdateFlag = false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
37 this.useIndex = useIndex;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
38 }
127
b2c1fd513feb push index thread add read log
one
parents: 126
diff changeset
39
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
40 public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
41 return indexList;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
42 }
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
43
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
44 public void commit() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
45 parentUpdateFlag = false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
46 }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
47
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
48 public ParentIndex getParentIndex() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
49 return parentIndex;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
50 }
127
b2c1fd513feb push index thread add read log
one
parents: 126
diff changeset
51
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
52 public void createIndex() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
53 // long t1 = System.currentTimeMillis();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
54 IndexCreater creater = new IndexCreater(root);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
55 // long t2 = System.currentTimeMillis();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
56 // System.out.println("createIndex time = " + (t2 - t1));
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
57 indexList = creater.getIndex();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
58 parentIndex = creater.getParentIndex();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
59 }
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
60
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
61 /**
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
62 * subTree以下のNodeに対してKey,Valueのペアでindexを使って探索を行う
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
63 *
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
64 * @param query
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
65 * @param subTree
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
66 * @param key
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
67 * @param searchValue
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
68 * @return
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
69 */
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
70 // public Iterator<TreeNode> findInSubTree(final Query query, TreeNode
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
71 // subTree, String key, String searchValue) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
72 // /*
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
73 // * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
74 // * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
75 // */
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
76 // Iterator<TreeNode> nodeIterator = index.get(key, searchValue);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
77 // if (nodeIterator.hasNext() && useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
78 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
79 // // ここでNode以下にあるか調べる
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
80 // List<TreeNode> filteredList = List.nil();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
81 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
82 // for (;nodeIterator.hasNext();) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
83 // TreeNode targetNode = nodeIterator.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
84 // TreeNode parent = targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
85 // while (parent != null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
86 // parent = parentIndex.get(parent);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
87 // if (parent.equals(subTree))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
88 // filteredList = filteredList.cons(targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
89 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
90 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
91 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
92 // return filteredList.iterator();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
93 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
94 // } else {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
95 // final PathNodeIterator itNode = new PathNodeIterator(subTree);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
96 // return new Iterator<TreeNode>() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
97 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
98 // private TreeNode matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
99 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
100 // private TreeNode nextmatch(PathNodeIterator itNode) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
101 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
102 // for (; itNode.hasNext();) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
103 // TreeNode targetNode = itNode.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
104 // if (query.condition(targetNode))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
105 // return targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
106 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
107 // return null;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
108 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
109 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
110 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
111 // public boolean hasNext() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
112 // if (matchNode == null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
113 // return false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
114 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
115 // return true;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
116 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
117 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
118 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
119 // public TreeNode next() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
120 // TreeNode currentNode = matchNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
121 // matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
122 // return currentNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
123 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
124 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
125 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
126 // public void remove() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
127 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
128 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
129 // };
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
130 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
131 // }
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
132
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
133 /**
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
134 * subTree以下のNodeに対してKeyに対応する値をindexを使って探索する
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
135 */
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
136 // public Iterator<TreeNode> findInSubTreeAllValue(final Query query, TreeNode
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
137 // subTree, String key) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
138 // /*
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
139 // * indexからinnerIndexを取得 取得したinnerIndexが保有するKeyを取得
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
140 // * そのKeyを保有するNodeとNodeのPathを取得する
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
141 // * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
142 // * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
143 // */
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
144 // Iterator<TreeNode> NodeIterator = index.getAll(key);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
145 // if (NodeIterator != null && useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
146 // List<TreeNode> filteredList = List.nil();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
147 // for (; NodeIterator.hasNext();) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
148 // TreeNode targetNode = NodeIterator.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
149 // TreeNode parent = targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
150 // while (parent != null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
151 // parent = parentIndex.get(parent);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
152 // if (parent.equals(subTree))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
153 // filteredList = filteredList.cons(targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
154 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
155 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
156 // return filteredList.iterator();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
157 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
158 // } else {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
159 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
160 // final PathNodeIterator itNode = new PathNodeIterator(subTree);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
161 // return new Iterator<TreeNode>() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
162 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
163 // private TreeNode matchPair = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
164 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
165 // private TreeNode nextmatch(PathNodeIterator itNode) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
166 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
167 // for (; itNode.hasNext();) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
168 // TreeNode targetNode = itNode.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
169 // if (query.condition(targetNode))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
170 // return targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
171 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
172 // return null;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
173 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
174 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
175 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
176 // public boolean hasNext() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
177 // if (matchPair == null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
178 // return false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
179 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
180 // return true;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
181 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
182 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
183 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
184 // public TreeNode next() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
185 // TreeNode currentNode = matchPair;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
186 // matchPair = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
187 // return currentNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
188 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
189 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
190 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
191 // public void remove() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
192 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
193 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
194 // };
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
195 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
196 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
197 public Iterator<TreeNode> find(final Query query, final String key, String searchValue) {
137
7334f78a92c3 name changed find to findInSubTree
one
parents: 136
diff changeset
198
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
199 Iterator<TreeNode> nodeIterator = get(key, searchValue);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
200 if (nodeIterator != null && useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
201 return nodeIterator;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
202 } else {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
203
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
204 final PathNodeIterator itNode = new PathNodeIterator(root);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
205 return new Iterator<TreeNode>() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
206
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
207 private TreeNode matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
208
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
209 private TreeNode nextmatch(PathNodeIterator itNode) {
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
210
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
211 for (; itNode.hasNext(); ) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
212 TreeNode targetNode = itNode.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
213 String value = targetNode.getAttributes().getString(key);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
214 if (useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
215 if (value != null)
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
216 ;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
217 // index = index.set(key, value, targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
218 }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
219 if (parentUpdateFlag)
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
220 ;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
221 // parentIndex = parentIndex.set(targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
222 if (query.condition(targetNode))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
223 return targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
224 }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
225 if (useIndex || parentUpdateFlag)
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
226 commit();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
227 return null;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
228 }
153
20af7f25ef32 miner change
one
parents: 152
diff changeset
229
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
230 @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
231 public boolean hasNext() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
232 if (matchNode == null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
233 return false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
234 }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
235 return true;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
236 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
237
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
238 @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
239 public TreeNode next() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
240 TreeNode currentPair = matchNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
241 matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
242 return currentPair;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
243 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
244
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
245 @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
246 public void remove() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
247 }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
248
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
249 };
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
250 }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
251 }
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
252
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
253 // public Iterator<TreeNode> findAll(final Query query, final String key) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
254 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
255 // Iterator<TreeNode> nodeList = index.getAll(key);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
256 // if (nodeList != null && useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
257 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
258 // return nodeList;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
259 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
260 // } else {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
261 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
262 // final PathNodeIterator itNode = new PathNodeIterator(node);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
263 // return new Iterator<TreeNode>() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
264 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
265 // private TreeNode matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
266 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
267 // private TreeNode nextmatch(PathNodeIterator itNode) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
268 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
269 // for (; itNode.hasNext();) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
270 // TreeNode targetNode = itNode.next();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
271 // String value = targetNode.getAttributes().getString(key);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
272 // if (useIndex) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
273 // if (value != null)
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
274 // index = index.set(key, value, targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
275 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
276 // if (parentUpdateFlag);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
277 // // parentIndex = parentIndex.set(targetNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
278 // if (query.condition(targetNode))
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
279 // return targetNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
280 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
281 // if (useIndex || parentUpdateFlag)
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
282 // commit();
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
283 // return null;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
284 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
285 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
286 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
287 // public boolean hasNext() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
288 // if (matchNode == null) {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
289 // return false;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
290 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
291 // return true;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
292 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
293 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
294 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
295 // public TreeNode next() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
296 // TreeNode currentPair = matchNode;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
297 // matchNode = nextmatch(itNode);
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
298 // return currentPair;
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
299 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
300 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
301 // @Override
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
302 // public void remove() {
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
303 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
304 //
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
305 // };
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
306 // }
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
307 // }
139
ec166c8ff079 add findAll and findInSubTreeAll
one
parents: 137
diff changeset
308
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
309 public Iterator<TreeNode> get(String key, String value) {
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
310 Optional<TreeMap<String, List<TreeNode>>> indexOp = indexList.getLoop(key);
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
311 if (!indexOp.isPresent())
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
312 return null;
136
0f68cd7b2838 add Node Search
one
parents: 134
diff changeset
313
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
314 Optional<List<TreeNode>> nodeListOp = indexOp.get().getLoop(value);
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
315 if (!nodeListOp.isPresent())
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
316 return new NulIterator<TreeNode>();
184
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
317
d2b710337eaa change TreeMap
tatsuki
parents: 183
diff changeset
318 return nodeListOp.get().iterator();
183
066d9c5758dc change TreeContext
tatsuki
parents: 179
diff changeset
319 }
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
320 }