diff 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
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java	Tue Sep 09 16:23:01 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java	Wed Sep 10 18:54:52 2014 +0900
@@ -5,15 +5,10 @@
 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.PathNodeIterator;
 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
 
 public class BruteForceTraverser {
@@ -22,12 +17,12 @@
 	TreeMap<String,TreeNode> nodeIndex;
 	TreeMap<String,String> attributeIndex;	
 	
-	public BruteForceTraverser(TreeNode _root){
+	public BruteForceTraverser(TreeNode _root) {
 		node = _root;
 		//pathNodes = this.traverse(_root,new DefaultNodePath(),-1);
 	}
 	
-	public BruteForceTraverser getTraverser(JungleTree tree){
+	public BruteForceTraverser getTraverser(JungleTree tree) {
 		return new BruteForceTraverser(tree.getRootNode());
 	}
 	
@@ -60,15 +55,43 @@
 		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();
+	public Iterator<Pair<TreeNode, NodePath>> find(final Query query) {
+		final PathNodeIterator itNode = new PathNodeIterator(node);
+		
+		return new Iterator<Pair<TreeNode, NodePath>>() {
+
+            private Pair<TreeNode,NodePath> matchPair = nextmatch(itNode);
+
+            private Pair<TreeNode, NodePath> nextmatch(PathNodeIterator itNode) {
+                for (;itNode.hasNext();) {
+                    Pair<TreeNode, NodePath> pathNode = itNode.next();
+                    if (query.condition(pathNode.left()))
+                        return pathNode;
+                }   
+                return null;
+            }
+            
+            @Override
+            public boolean hasNext() {
+                // TODO Auto-generated method stub
+                return matchPair != null;
+            }
+
+            @Override
+            public Pair<TreeNode, NodePath> next() {
+               Pair<TreeNode,NodePath> currentPair = matchPair;
+               matchPair = nextmatch(itNode);
+               return currentPair;
+            }
+
+            @Override
+            public void remove() {
+                // TODO Auto-generated method stub
+                
+            }
+
+		};
+
 	}