comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 170:383b08d1711c

change Index form TreeMap<String TreeMap<String , List<TreeNode>>> → TreeMap<String TreeMap<String , TreeMap<TreeNode,TreeNode>>>
author one
date Fri, 26 Dec 2014 03:58:47 +0900
parents 3cd075a445bf
children 809f813d1083
comparison
equal deleted inserted replaced
169:3cd075a445bf 170:383b08d1711c
6 import java.io.IOException; 6 import java.io.IOException;
7 import java.io.PrintWriter; 7 import java.io.PrintWriter;
8 import java.util.Iterator; 8 import java.util.Iterator;
9 9
10 import fj.data.List; 10 import fj.data.List;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator;
12 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;
13 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator; 12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
14 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query; 13 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; 14 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;
16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexCreater; 15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexCreater;
64 63
65 long t1 = System.currentTimeMillis(); 64 long t1 = System.currentTimeMillis();
66 IndexCreater creater = new IndexCreater(node); 65 IndexCreater creater = new IndexCreater(node);
67 long t2 = System.currentTimeMillis(); 66 long t2 = System.currentTimeMillis();
68 System.out.println("createIndex time = " + (t2 - t1)); 67 System.out.println("createIndex time = " + (t2 - t1));
69 File file = new File("./time/createParentIndex"); 68 // File file = new File("./time/createParentIndex");
70 try { 69 // try {
71 PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true))); 70 // PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));
72 pw.println((t2 - t1)); 71 // pw.println((t2 - t1));
73 pw.close(); 72 // pw.close();
74 } catch (IOException e) { 73 // } catch (IOException e) {
75 // TODO Auto-generated catch block 74 // // TODO Auto-generated catch block
76 e.printStackTrace(); 75 // e.printStackTrace();
77 } 76 // }
78 index = creater.getIndex(); 77 index = creater.getIndex();
79 parentIndex = creater.getParentIndex(); 78 parentIndex = creater.getParentIndex();
80 } 79 }
81 80
82 /** 81 /**
91 public Iterator<TreeNode> findInSubTree(final Query query, TreeNode subTree, String key, String searchValue) { 90 public Iterator<TreeNode> findInSubTree(final Query query, TreeNode subTree, String key, String searchValue) {
92 /* 91 /*
93 * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、 92 * indexを使って取ってきたNodeのPathと、subTreeのPathを先頭から1つずつ比較し、
94 * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す 93 * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
95 */ 94 */
96 List<TreeNode> nodeList = index.get(key, searchValue); 95 Iterator<TreeNode> nodeIterator = index.get(key, searchValue);
97 if (nodeList != null && useIndex) { 96 if (nodeIterator.hasNext() && useIndex) {
98
99 if (nodeList.isEmpty())
100 return new NulIterator<TreeNode>();// 空のIteratorを返す
101 97
102 // ここでNode以下にあるか調べる 98 // ここでNode以下にあるか調べる
103 List<TreeNode> filteredList = List.nil(); 99 List<TreeNode> filteredList = List.nil();
104 100
105 for (TreeNode targetNode : nodeList) { 101 for (;nodeIterator.hasNext();) {
102 TreeNode targetNode = nodeIterator.next();
106 TreeNode parent = targetNode; 103 TreeNode parent = targetNode;
107 while (parent != null) { 104 while (parent != null) {
108 parent = parentIndex.get(parent); 105 parent = parentIndex.get(parent);
109 if (parent.equals(subTree)) 106 if (parent.equals(subTree))
110 filteredList = filteredList.cons(targetNode); 107 filteredList = filteredList.cons(targetNode);
222 } 219 }
223 } 220 }
224 221
225 public Iterator<TreeNode> find(final Query query, final String key, String searchValue) { 222 public Iterator<TreeNode> find(final Query query, final String key, String searchValue) {
226 223
227 List<TreeNode> nodeList = index.get(key, searchValue); 224 Iterator<TreeNode> nodeIterator = index.get(key, searchValue);
228 if (nodeList != null && useIndex) { 225 if (nodeIterator.hasNext() && useIndex) {
229 return nodeList.iterator(); 226 return nodeIterator;
230 } else { 227 } else {
231 228
232 final PathNodeIterator itNode = new PathNodeIterator(node); 229 final PathNodeIterator itNode = new PathNodeIterator(node);
233 return new Iterator<TreeNode>() { 230 return new Iterator<TreeNode>() {
234 231
241 String value = targetNode.getAttributes().getString(key); 238 String value = targetNode.getAttributes().getString(key);
242 if (useIndex) { 239 if (useIndex) {
243 if (value != null) 240 if (value != null)
244 index = index.set(key, value, targetNode); 241 index = index.set(key, value, targetNode);
245 } 242 }
246 if (parentUpdateFlag) 243 if (parentUpdateFlag);
247 // parentIndex = parentIndex.set(targetNode); 244 // parentIndex = parentIndex.set(targetNode);
248 if (query.condition(targetNode)) 245 if (query.condition(targetNode))
249 return targetNode; 246 return targetNode;
250 } 247 }
251 if (useIndex || parentUpdateFlag) 248 if (useIndex || parentUpdateFlag)
297 String value = targetNode.getAttributes().getString(key); 294 String value = targetNode.getAttributes().getString(key);
298 if (useIndex) { 295 if (useIndex) {
299 if (value != null) 296 if (value != null)
300 index = index.set(key, value, targetNode); 297 index = index.set(key, value, targetNode);
301 } 298 }
302 if (parentUpdateFlag) 299 if (parentUpdateFlag);
303 // parentIndex = parentIndex.set(targetNode); 300 // parentIndex = parentIndex.set(targetNode);
304 if (query.condition(targetNode)) 301 if (query.condition(targetNode))
305 return targetNode; 302 return targetNode;
306 } 303 }
307 if (useIndex || parentUpdateFlag) 304 if (useIndex || parentUpdateFlag)