Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 98:95000ff9064d
Create Query
author | one |
---|---|
date | Tue, 09 Sep 2014 16:23:01 +0900 |
parents | a1e20a440ddd |
children | 92d0c6e4655c |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; import java.util.Iterator; import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 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.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNode; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNodeImpl; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query; public class BruteForceTraverser { BruteForceTraverser traverser; TreeNode node; TreeMap<String,TreeNode> nodeIndex; TreeMap<String,String> attributeIndex; public BruteForceTraverser(TreeNode _root){ node = _root; //pathNodes = this.traverse(_root,new DefaultNodePath(),-1); } public BruteForceTraverser getTraverser(JungleTree tree){ return new BruteForceTraverser(tree.getRootNode()); } /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){ Children children = _node.getChildren(); Either<Error,TreeNode> either = children.at(0); IteratorPathNode list = new IteratorPathNodeImpl(); int pathCount = _pos; if(children.size() == 0){ list = list.add(new Pair<TreeNode, NodePath>(node, _path.add(_pos))); return list; } for(TreeNode child : children){ list = list.append(traverse(child,_path,pathCount)); pathCount++; } list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos))); return list; } public int count(Query _query, String _key, String _attribute){ return this.find(_query,_key,_attribute); } public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ return null; } */ public Iterator<Pair<TreeNode, NodePath>> find(Query _query){ IteratorPathNode itNode = new IteratorPathNodeImpl(node); List<Pair<TreeNode, NodePath>> list = List.nil();; for(;itNode.hasNext();){ Pair<TreeNode, NodePath> pathNode = itNode.next(); if(_query.condition(pathNode.left())) list = list.cons(pathNode);//list.reverse();//= list.cons(); } return list.iterator(); } }