Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 97:a1e20a440ddd
add BruteForceTraverser
author | one |
---|---|
date | Mon, 08 Sep 2014 17:03:08 +0900 |
parents | |
children | 95000ff9064d |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; public class BruteForceTraverser { List<Pair<NodePath,TreeNode>> pathNodes; TreeMap<String,TreeNode> nodeIndex; TreeMap<String,String> attributeIndex; BruteForceTraverser(TreeNode _root){ pathNodes = this.traverse(_root,new DefaultNodePath(),-1); } public List<Pair<NodePath,TreeNode>> traverse(TreeNode _node ,NodePath _path ,int _pos){ Children children = _node.getChildren(); List<Pair<NodePath,TreeNode>> list = List.nil(); int pathCount = _pos; if(children.size() == 0){ list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); return list; } for(TreeNode child : children){ list = list.append(traverse(child,_path,pathCount)); pathCount++; } list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); return list; } public List<Pair<NodePath,TreeNode>> search(String _key, String _Attribute){ List<Pair<NodePath,TreeNode>> pathNode = List.nil(); for(Pair<NodePath,TreeNode> searchNode : pathNodes){ if(searchNode.right().getAttributes().get(_key).equals(_Attribute)) pathNode = pathNode.cons(searchNode); } return pathNode; } public int count(String _key, String _attribute){ return this.search(_key,_attribute).length(); } public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ return null; } }