Mercurial > hg > Members > tatsuki > bench > jungle-core
comparison 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 |
comparison
equal
deleted
inserted
replaced
97:a1e20a440ddd | 98:95000ff9064d |
---|---|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; |
2 | |
3 import java.util.Iterator; | |
2 | 4 |
3 import fj.data.List; | 5 import fj.data.List; |
4 import fj.data.TreeMap; | 6 import fj.data.TreeMap; |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | |
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; |
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; |
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNode; | |
16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNodeImpl; | |
17 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query; | |
10 | 18 |
11 public class BruteForceTraverser { | 19 public class BruteForceTraverser { |
12 List<Pair<NodePath,TreeNode>> pathNodes; | 20 BruteForceTraverser traverser; |
21 TreeNode node; | |
13 TreeMap<String,TreeNode> nodeIndex; | 22 TreeMap<String,TreeNode> nodeIndex; |
14 TreeMap<String,String> attributeIndex; | 23 TreeMap<String,String> attributeIndex; |
15 | 24 |
16 BruteForceTraverser(TreeNode _root){ | 25 public BruteForceTraverser(TreeNode _root){ |
17 pathNodes = this.traverse(_root,new DefaultNodePath(),-1); | 26 node = _root; |
27 //pathNodes = this.traverse(_root,new DefaultNodePath(),-1); | |
18 } | 28 } |
19 | 29 |
20 public List<Pair<NodePath,TreeNode>> traverse(TreeNode _node ,NodePath _path ,int _pos){ | 30 public BruteForceTraverser getTraverser(JungleTree tree){ |
31 return new BruteForceTraverser(tree.getRootNode()); | |
32 } | |
33 | |
34 | |
35 /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){ | |
21 | 36 |
22 Children children = _node.getChildren(); | 37 Children children = _node.getChildren(); |
23 List<Pair<NodePath,TreeNode>> list = List.nil(); | 38 Either<Error,TreeNode> either = children.at(0); |
39 IteratorPathNode list = new IteratorPathNodeImpl(); | |
24 int pathCount = _pos; | 40 int pathCount = _pos; |
25 if(children.size() == 0){ | 41 if(children.size() == 0){ |
26 list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); | 42 list = list.add(new Pair<TreeNode, NodePath>(node, _path.add(_pos))); |
27 return list; | 43 return list; |
28 } | 44 } |
29 | 45 |
30 for(TreeNode child : children){ | 46 for(TreeNode child : children){ |
31 list = list.append(traverse(child,_path,pathCount)); | 47 list = list.append(traverse(child,_path,pathCount)); |
32 pathCount++; | 48 pathCount++; |
33 } | 49 } |
34 | 50 |
35 list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); | 51 list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos))); |
36 return list; | 52 return list; |
37 } | 53 } |
38 | 54 |
39 public List<Pair<NodePath,TreeNode>> search(String _key, String _Attribute){ | 55 public int count(Query _query, String _key, String _attribute){ |
40 List<Pair<NodePath,TreeNode>> pathNode = List.nil(); | 56 return this.find(_query,_key,_attribute); |
41 for(Pair<NodePath,TreeNode> searchNode : pathNodes){ | |
42 if(searchNode.right().getAttributes().get(_key).equals(_Attribute)) | |
43 pathNode = pathNode.cons(searchNode); | |
44 } | |
45 return pathNode; | |
46 } | |
47 | |
48 public int count(String _key, String _attribute){ | |
49 return this.search(_key,_attribute).length(); | |
50 } | 57 } |
51 | 58 |
52 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ | 59 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ |
53 return null; | 60 return null; |
54 } | 61 } |
62 */ | |
63 public Iterator<Pair<TreeNode, NodePath>> find(Query _query){ | |
64 IteratorPathNode itNode = new IteratorPathNodeImpl(node); | |
65 List<Pair<TreeNode, NodePath>> list = List.nil();; | |
66 for(;itNode.hasNext();){ | |
67 Pair<TreeNode, NodePath> pathNode = itNode.next(); | |
68 if(_query.condition(pathNode.left())) | |
69 list = list.cons(pathNode);//list.reverse();//= list.cons(); | |
70 } | |
71 return list.iterator(); | |
72 } | |
73 | |
55 | 74 |
56 } | 75 } |