Mercurial > hg > Members > tatsuki > bench > jungle-core
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) |