comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 99:92d0c6e4655c

refactoring to IteratorPathNode
author one
date Wed, 10 Sep 2014 18:54:52 +0900
parents 95000ff9064d
children
comparison
equal deleted inserted replaced
98:95000ff9064d 99:92d0c6e4655c
3 import java.util.Iterator; 3 import java.util.Iterator;
4 4
5 import fj.data.List; 5 import fj.data.List;
6 import fj.data.TreeMap; 6 import fj.data.TreeMap;
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; 9 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;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNode; 11 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNodeImpl;
17 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query; 12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
18 13
19 public class BruteForceTraverser { 14 public class BruteForceTraverser {
20 BruteForceTraverser traverser; 15 BruteForceTraverser traverser;
21 TreeNode node; 16 TreeNode node;
22 TreeMap<String,TreeNode> nodeIndex; 17 TreeMap<String,TreeNode> nodeIndex;
23 TreeMap<String,String> attributeIndex; 18 TreeMap<String,String> attributeIndex;
24 19
25 public BruteForceTraverser(TreeNode _root){ 20 public BruteForceTraverser(TreeNode _root) {
26 node = _root; 21 node = _root;
27 //pathNodes = this.traverse(_root,new DefaultNodePath(),-1); 22 //pathNodes = this.traverse(_root,new DefaultNodePath(),-1);
28 } 23 }
29 24
30 public BruteForceTraverser getTraverser(JungleTree tree){ 25 public BruteForceTraverser getTraverser(JungleTree tree) {
31 return new BruteForceTraverser(tree.getRootNode()); 26 return new BruteForceTraverser(tree.getRootNode());
32 } 27 }
33 28
34 29
35 /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){ 30 /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){
58 53
59 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ 54 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){
60 return null; 55 return null;
61 } 56 }
62 */ 57 */
63 public Iterator<Pair<TreeNode, NodePath>> find(Query _query){ 58 public Iterator<Pair<TreeNode, NodePath>> find(final Query query) {
64 IteratorPathNode itNode = new IteratorPathNodeImpl(node); 59 final PathNodeIterator itNode = new PathNodeIterator(node);
65 List<Pair<TreeNode, NodePath>> list = List.nil();; 60
66 for(;itNode.hasNext();){ 61 return new Iterator<Pair<TreeNode, NodePath>>() {
67 Pair<TreeNode, NodePath> pathNode = itNode.next(); 62
68 if(_query.condition(pathNode.left())) 63 private Pair<TreeNode,NodePath> matchPair = nextmatch(itNode);
69 list = list.cons(pathNode);//list.reverse();//= list.cons(); 64
70 } 65 private Pair<TreeNode, NodePath> nextmatch(PathNodeIterator itNode) {
71 return list.iterator(); 66 for (;itNode.hasNext();) {
67 Pair<TreeNode, NodePath> pathNode = itNode.next();
68 if (query.condition(pathNode.left()))
69 return pathNode;
70 }
71 return null;
72 }
73
74 @Override
75 public boolean hasNext() {
76 // TODO Auto-generated method stub
77 return matchPair != null;
78 }
79
80 @Override
81 public Pair<TreeNode, NodePath> next() {
82 Pair<TreeNode,NodePath> currentPair = matchPair;
83 matchPair = nextmatch(itNode);
84 return currentPair;
85 }
86
87 @Override
88 public void remove() {
89 // TODO Auto-generated method stub
90
91 }
92
93 };
94
72 } 95 }
73 96
74 97
75 } 98 }