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())