Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexCreater.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 | a2598139df64 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index; import java.util.Stack; import fj.data.List; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren; public class IndexCreater { TreeNode root; TreeNode node; int childNumber; private TreeNodeChildren children; private Stack<TreeNode> nodeStack = new Stack<TreeNode>(); private Stack<Integer> searchStack = new Stack<Integer>(); ParentIndex parentIndex = new ParentIndex(); Index index = new Index(); public IndexCreater(TreeNode rootNode) { this.root = rootNode; this.node = rootNode; while (node != null) { TreeNode targetNode = node; 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 (node.getChildren().size() > 0) { nodeStack.push(node); TreeNode parent = node; children = node.getChildren(); node = children.at(0).b(); parentIndex.set(parent, node); childNumber = 1; searchStack.push(childNumber); } else if (node == root) { node = null; // no more node children = null; return ; } else if (children != null && children.size() > childNumber) { childNumber = searchStack.pop(); TreeNode parent = nodeStack.pop(); nodeStack.push(parent); node = children.at(childNumber).b(); parentIndex.set(parent, node); searchStack.push(++childNumber); } else { node = nodeStack.pop(); children = node.getChildren(); childNumber = searchStack.pop(); for (; children.size() == childNumber;) { if (node == root) { node = null; // no more node children = null; return ; } node = nodeStack.pop(); children = node.getChildren(); childNumber = searchStack.pop(); } if (node != null && childNumber < children.size()) { nodeStack.push(node); TreeNode parent = node; node = children.at(childNumber).b(); parentIndex.set(parent, node); searchStack.push(++childNumber); } } } } public Index getIndex() { return index; } public ParentIndex getParentIndex() { return parentIndex; } }