Mercurial > hg > Members > tatsuki > bench > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 154:b8cef4b640a3
update index for commit
author | one |
---|---|
date | Wed, 26 Nov 2014 06:23:07 +0900 |
parents | 20af7f25ef32 |
children | f98f2704b154 6b4aab79910d |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Tue Nov 25 17:52:41 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Wed Nov 26 06:23:07 2014 +0900 @@ -18,11 +18,15 @@ ParentIndex parentIndex; boolean parentUpdateFlag; IndexManager indexManager; - boolean indexFlag; + boolean useIndex; - public InterfaceTraverser(TreeNode _root, Index index, ParentIndex parentIndex, IndexManager indexManager, - boolean indexFlag) { - this.node = _root; + public InterfaceTraverser(TreeNode root, IndexManager indexManager, boolean indexFlag) { + this(root, new Index(), new ParentIndex(), indexManager, indexFlag); + } + + public InterfaceTraverser(TreeNode root, Index index, ParentIndex parentIndex, IndexManager indexManager, + boolean useIndex) { + this.node = root; this.index = index; this.indexManager = indexManager; this.parentIndex = parentIndex; @@ -30,7 +34,7 @@ parentUpdateFlag = true; else parentUpdateFlag = false; - this.indexFlag = indexFlag; + this.useIndex = useIndex; } public Index getIndex() { @@ -50,51 +54,20 @@ this.index = index; } - public Iterator<TreeNode> emptyQuery() { + public void createIndex() { final PathNodeIterator itNode = new PathNodeIterator(node); - return new Iterator<TreeNode>() { - - private TreeNode matchNode = nextmatch(itNode); - - private TreeNode nextmatch(PathNodeIterator itNode) { - - for (; itNode.hasNext();) { - TreeNode targetNode = itNode.next(); - List<String> keys = targetNode.getAttributes().getKeys(); - for (String key : keys) { - String value = targetNode.getAttributes().getString(key); - if (value != null) - index = index.set(key, value, targetNode); - if (parentUpdateFlag) - parentIndex = parentIndex.set(targetNode); - } - } - commit(); - return null; + for (; itNode.hasNext();) { + TreeNode targetNode = itNode.next(); + if (parentUpdateFlag) + parentIndex = parentIndex.set(targetNode); + List<String> keys = targetNode.getAttributes().getKeys(); + for (String key : keys) { + String value = targetNode.getAttributes().getString(key); + if (value != null) + index = index.set(key, value, targetNode); } - - @Override - public boolean hasNext() { - if (matchNode == null) { - return false; - } - return true; - } - - @Override - public TreeNode next() { - TreeNode currentPair = matchNode; - matchNode = nextmatch(itNode); - return currentPair; - } - - @Override - public void remove() { - } - - }; - + } } /** @@ -112,7 +85,7 @@ * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す */ List<TreeNode> nodeList = index.get(key, searchValue); - if (nodeList != null) { + if (nodeList != null && useIndex) { if (nodeList.isEmpty()) return new NulIterator<TreeNode>();// 空のIteratorを返す @@ -187,7 +160,7 @@ * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す */ Iterator<TreeNode> NodeIterator = index.getAll(key); - if (NodeIterator != null) { + if (NodeIterator != null && useIndex) { List<TreeNode> filteredList = List.nil(); for (; NodeIterator.hasNext();) { TreeNode targetNode = NodeIterator.next(); @@ -243,7 +216,7 @@ public Iterator<TreeNode> find(Query query, String key, String searchValue) { List<TreeNode> nodeList = index.get(key, searchValue); - if (nodeList != null) { + if (nodeList != null && useIndex) { return nodeList.iterator(); } else { @@ -257,7 +230,7 @@ for (; itNode.hasNext();) { TreeNode targetNode = itNode.next(); String value = targetNode.getAttributes().getString(key); - if (indexFlag) { + if (useIndex) { if (value != null) index = index.set(key, value, targetNode); } @@ -266,7 +239,8 @@ if (query.condition(targetNode)) return targetNode; } - commit(); + if (useIndex || parentUpdateFlag) + commit(); return null; } @@ -296,7 +270,7 @@ public Iterator<TreeNode> findAll(Query query, String key) { Iterator<TreeNode> nodeList = index.getAll(key); - if (nodeList != null) { + if (nodeList != null && useIndex) { return nodeList; @@ -312,7 +286,7 @@ for (; itNode.hasNext();) { TreeNode targetNode = itNode.next(); String value = targetNode.getAttributes().getString(key); - if (indexFlag) { + if (useIndex) { if (value != null) index = index.set(key, value, targetNode); } @@ -321,7 +295,8 @@ if (query.condition(targetNode)) return targetNode; } - commit(); + if (useIndex || parentUpdateFlag) + commit(); return null; }