Mercurial > hg > Members > tatsuki > bench > jungle-core
comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 177:75422f82e6b6 oldCommit
miner change
author | tatsuki |
---|---|
date | Sun, 15 Mar 2015 14:57:26 +0900 |
parents | 550f51183d8a |
children | 817febd9c69b |
comparison
equal
deleted
inserted
replaced
176:550f51183d8a | 177:75422f82e6b6 |
---|---|
2 | 2 |
3 import java.util.Iterator; | 3 import java.util.Iterator; |
4 | 4 |
5 import fj.Ord; | 5 import fj.Ord; |
6 import fj.P2; | 6 import fj.P2; |
7 import fj.data.List; | |
7 import fj.data.Option; | 8 import fj.data.Option; |
8 import fj.data.TreeMap; | 9 import fj.data.TreeMap; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
11 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator; | 12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator; |
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; | 16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; |
16 | 17 |
17 public class InterfaceTraverser { | 18 public class InterfaceTraverser { |
18 | 19 |
19 TreeNode node; | 20 TreeNode node; |
20 TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index; | 21 TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexList; |
21 ParentIndex parentIndex; | 22 ParentIndex parentIndex; |
22 boolean parentUpdateFlag; | 23 boolean parentUpdateFlag; |
23 IndexManager indexManager; | 24 IndexManager indexManager; |
24 boolean useIndex; | 25 boolean useIndex; |
25 | 26 |
28 } | 29 } |
29 | 30 |
30 public InterfaceTraverser(TreeNode root, TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index, | 31 public InterfaceTraverser(TreeNode root, TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index, |
31 ParentIndex parentIndex, IndexManager indexManager, boolean useIndex) { | 32 ParentIndex parentIndex, IndexManager indexManager, boolean useIndex) { |
32 this.node = root; | 33 this.node = root; |
33 this.index = index; | 34 this.indexList = index; |
34 this.indexManager = indexManager; | 35 this.indexManager = indexManager; |
35 this.parentIndex = parentIndex; | 36 this.parentIndex = parentIndex; |
36 if (parentIndex.isEmpty()) | 37 if (parentIndex.isEmpty()) |
37 parentUpdateFlag = true; | 38 parentUpdateFlag = true; |
38 else | 39 else |
39 parentUpdateFlag = false; | 40 parentUpdateFlag = false; |
40 this.useIndex = useIndex; | 41 this.useIndex = useIndex; |
41 } | 42 } |
42 | 43 |
43 public TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> getIndex() { | 44 public TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> getIndex() { |
44 return index; | 45 return indexList; |
45 } | 46 } |
46 | 47 |
47 public void commit() { | 48 public void commit() { |
48 parentUpdateFlag = false; | 49 parentUpdateFlag = false; |
49 indexManager.commit(index, parentIndex); | 50 indexManager.commit(indexList, parentIndex); |
50 } | 51 } |
51 | 52 |
52 public ParentIndex getParentIndex() { | 53 public ParentIndex getParentIndex() { |
53 return parentIndex; | 54 return parentIndex; |
54 } | 55 } |
55 | 56 |
56 public void setIndex(TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index) { | 57 public void setIndex(TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index) { |
57 this.index = index; | 58 this.indexList = index; |
58 } | 59 } |
59 | 60 |
60 public void createIndex() { | 61 public void createIndex() { |
61 // long t1 = System.currentTimeMillis(); | 62 // long t1 = System.currentTimeMillis(); |
62 IndexCreater creater = new IndexCreater(node); | 63 IndexCreater creater = new IndexCreater(node); |
63 // long t2 = System.currentTimeMillis(); | 64 // long t2 = System.currentTimeMillis(); |
64 // System.out.println("createIndex time = " + (t2 - t1)); | 65 // System.out.println("createIndex time = " + (t2 - t1)); |
65 index = creater.getIndex(); | 66 indexList = creater.getIndex(); |
66 parentIndex = creater.getParentIndex(); | 67 parentIndex = creater.getParentIndex(); |
67 } | 68 } |
68 | 69 |
69 /** | 70 /** |
70 * subTree以下のNodeに対してKey,Valueのペアでindexを使って探索を行う | 71 * subTree以下のNodeに対してKey,Valueのペアでindexを使って探索を行う |
210 // } | 211 // } |
211 | 212 |
212 public Iterator<TreeNode> find(final Query query, final String key, String searchValue) { | 213 public Iterator<TreeNode> find(final Query query, final String key, String searchValue) { |
213 | 214 |
214 Iterator<TreeNode> nodeIterator = get(key, searchValue); | 215 Iterator<TreeNode> nodeIterator = get(key, searchValue); |
215 if (nodeIterator.hasNext() && useIndex) { | 216 if (nodeIterator != null && useIndex) { |
216 return nodeIterator; | 217 return nodeIterator; |
217 } else { | 218 } else { |
218 | 219 |
219 final PathNodeIterator itNode = new PathNodeIterator(node); | 220 final PathNodeIterator itNode = new PathNodeIterator(node); |
220 return new Iterator<TreeNode>() { | 221 return new Iterator<TreeNode>() { |
321 // } | 322 // } |
322 // } | 323 // } |
323 | 324 |
324 public Iterator<TreeNode> get(String key, String value) { | 325 public Iterator<TreeNode> get(String key, String value) { |
325 | 326 |
326 Option<TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexOp = index.get(key); | 327 Option<TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexOp = indexList.get(key); |
327 if (indexOp.isNone()) | 328 if (indexOp.isNone()) |
328 return new NulIterator<TreeNode>(); | 329 return null; |
329 | 330 |
330 TreeMap<String, TreeMap<TreeNode, TreeNode>> index = indexOp.some(); | 331 TreeMap<String, TreeMap<TreeNode, TreeNode>> index = indexOp.some(); |
331 Option<TreeMap<TreeNode, TreeNode>> nodeMapOp = index.get(value); | 332 Option<TreeMap<TreeNode, TreeNode>> nodeMapOp = index.get(value); |
332 | 333 |
333 if (nodeMapOp.isNone()) | 334 if (nodeMapOp.isNone()) |