Mercurial > hg > Members > tatsuki > bench > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexCreater.java @ 175:e26462a38ce0
add push pop
author | tatsuki |
---|---|
date | Fri, 06 Mar 2015 10:44:50 +0900 |
parents | 383b08d1711c |
children | 066d9c5758dc |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexCreater.java Mon Feb 16 11:36:45 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexCreater.java Fri Mar 06 10:44:50 2015 +0900 @@ -2,9 +2,13 @@ import java.util.Stack; +import fj.Ord; import fj.data.List; +import fj.data.Option; +import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.TreeMapOrd; public class IndexCreater { @@ -15,7 +19,7 @@ private Stack<TreeNode> nodeStack = new Stack<TreeNode>(); private Stack<Integer> searchStack = new Stack<Integer>(); ParentIndex parentIndex = new ParentIndex(); - Index index = new Index(); + TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexList = TreeMap.empty(Ord.stringOrd); public IndexCreater(TreeNode rootNode) { this.root = rootNode; @@ -26,7 +30,7 @@ for (String key : keys) { String value = targetNode.getAttributes().getString(key); if (value != null) - index = index.set(key, value, targetNode); + indexList = set(key, value, targetNode); } if (node.getChildren().size() > 0) { nodeStack.push(node); @@ -39,7 +43,7 @@ } else if (node == root) { node = null; // no more node children = null; - return ; + return; } else if (children != null && children.size() > childNumber) { childNumber = searchStack.pop(); TreeNode parent = nodeStack.pop(); @@ -55,7 +59,7 @@ if (node == root) { node = null; // no more node children = null; - return ; + return; } node = nodeStack.pop(); children = node.getChildren(); @@ -72,8 +76,37 @@ } } - public Index getIndex() { - return index; + public TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> set(String key, String value, TreeNode node) { + + Option<TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexOp = indexList.get(key); + if (indexOp.isNone()) { + TreeMap<String, TreeMap<TreeNode, TreeNode>> index = TreeMap.empty(Ord.stringOrd); + TreeMap<TreeNode, TreeNode> nodeMap = TreeMap.empty(TreeMapOrd.treeNodeOrd); + nodeMap = nodeMap.set(node, node); + TreeMap<String, TreeMap<TreeNode, TreeNode>> newIndex = index.set(value, nodeMap); + indexList = indexList.set(key, newIndex); + return indexList; + } + + TreeMap<String, TreeMap<TreeNode, TreeNode>> index = indexOp.some(); + Option<TreeMap<TreeNode, TreeNode>> nodeMapOp = index.get(value); + + TreeMap<TreeNode, TreeNode> newNodeMap; + if (nodeMapOp.isSome()) { + TreeMap<TreeNode, TreeNode> nodeMap = nodeMapOp.some(); + newNodeMap = nodeMap.set(node, node); + } else { + TreeMap<TreeNode, TreeNode> nodeMap = TreeMap.empty(TreeMapOrd.treeNodeOrd); + newNodeMap = nodeMap.set(node, node); + } + TreeMap<String, TreeMap<TreeNode, TreeNode>> newIndex = index.set(value, newNodeMap); + indexList = indexList.set(key, newIndex); + + return indexList; + } + + public TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> getIndex() { + return indexList; } public ParentIndex getParentIndex() {