changeset 308:201cc75a9984

change Red Black Tree Edit Path Extends
author tatsuki
date Thu, 26 Jan 2017 15:23:25 +0900
parents 67c330ef2472
children f8e75ef7ac5d
files src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/tree/CreateListTreeBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/DefaultJungle.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/core/App.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/query/traverser/RedBlackTreeInterfaceTraverser.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/query/traverser/RedBlackTreeTraverser.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/logger/LoggingChildren.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/DefaultNodePath.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/NodePath.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/PathType.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/RedBlackTreeNodePath.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/omnigraffle/App.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultJungleTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DifferenceJungleTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/JungleTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/treeEditor/RedBlackTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/RedBlackTreeTransactionManager.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/RedBlackTreeEvaluator.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/RedBlackTreeTraverser.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/Result.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/xml/reader/XmlReader.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/operations/NetworkNodePath.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/persistent/PersistentJungleTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/transaction/NetworkDefaultJungleTreeEditor.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetNodeOfPathTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetOldTreeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/AppendChildAndPutAttributeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/ReplaceRootNodeAt.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/DifferencialJungleTreeEditorTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/MultiDifferencialJngleTreeEditorTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorNodeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/defaultnode/GetNodePath.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetKeysTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetfilteringKeyTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/IndexTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/ParentIndexPutTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/IndexTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/ParentIndexPutTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DefaultInterfaceTraverserTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DifferentialInterfaceTraverserTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/RedBlackInterfaceTraverserTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DefaultTree/DefaultJungleTreeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DifferencialTree/DifferencialJungleTreeTest.java src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/JungleTreeCreaterTest.java
diffstat 48 files changed, 466 insertions(+), 264 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleBenchMark.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,7 +7,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeAttributes;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 
 import java.nio.ByteBuffer;
@@ -19,7 +18,7 @@
  */
 public class JungleBenchMark {
     public static void main(String args[]) {
-        DefaultJungle jungle = new DefaultJungle(null, "sample", new DefaultTraverser());
+        DefaultJungle jungle = new DefaultJungle(null, "sample");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/index/CreateIndexBenchMark.java	Thu Jan 26 15:23:25 2017 +0900
@@ -6,7 +6,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 
 /**
@@ -27,7 +26,7 @@
 
         String key = "key";
         String indexKey = "indexKey";
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
 
         for (int i = 100; i <= 100000;) {
             Long t1 = System.currentTimeMillis();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/tree/CreateListTreeBenchMark.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/tree/CreateListTreeBenchMark.java	Thu Jan 26 15:23:25 2017 +0900
@@ -5,7 +5,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -15,7 +14,7 @@
 public class CreateListTreeBenchMark {
 
     public static void main(String args[]) {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         if (args.length == 0) {
             System.out.println("args default or difference");
             System.exit(0);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/DefaultJungle.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/DefaultJungle.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,7 +7,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.NullJournal;
 import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.DifferentialInterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.InterfaceTraverser;
-import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.RedBlackTreeTraverser;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.RedBlackTreeInterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.TreeContext;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.DefaultTreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.TreeOperationLog;
@@ -26,6 +26,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.redBlackTree.EmptyTreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.DefaultInterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.jungle.traverser.RedBlackTreeTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.DefaultJungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.DifferenceListJungleTree;
@@ -47,7 +48,7 @@
     private TreeEditor redBlackTreeEditor;
 
     public static void main(String args[]) {
-        DefaultJungle j = new DefaultJungle(null, "hoge", new DefaultTraverser());
+        DefaultJungle j = new DefaultJungle(null, "hoge");
         JungleTree t = j.createNewTree("fuga");
 
         JungleTreeEditor e1 = t.getJungleTreeEditor();
@@ -61,13 +62,15 @@
         e1.success();
     }
 
-    public DefaultJungle(Journal journal, String uuid, Traverser traverser) {
+    public DefaultJungle(Journal journal, String uuid) {
         this.journal = new NullJournal();
         this.trees = new ConcurrentHashMap<String, JungleTree>();
         this.uuid = uuid;
-        this.treeEditor = new DefaultTreeEditor(traverser);
-        this.differenceEditor = new DifferenceTreeEditor(traverser);
-        this.redBlackTreeEditor = new RedBlackTreeEditor(traverser);
+        Traverser defaultTraverser = new DefaultTraverser();
+        Traverser redBlackTreeTraverser = new RedBlackTreeTraverser();
+        this.treeEditor = new DefaultTreeEditor(defaultTraverser);
+        this.differenceEditor = new DifferenceTreeEditor(defaultTraverser);
+        this.redBlackTreeEditor = new RedBlackTreeEditor(redBlackTreeTraverser);
     }
 
     @Override
@@ -181,7 +184,7 @@
 
         };
         TreeNode rootNode = new EmptyTreeNode();
-        InterfaceTraverser traverser = new RedBlackTreeTraverser(rootNode);
+        InterfaceTraverser traverser = new RedBlackTreeInterfaceTraverser(rootNode);
         TreeContext tc = new DefaultTreeContext(rootNode, null, list, uuid, treeName, 0, traverser);
         JungleTree newTree = new RedBlackJungleTree(tc, uuid, journal.getWriter(), redBlackTreeEditor, balanceKey);
         if (trees.putIfAbsent(treeName, newTree) != null) {
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/commandline/commandline.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.omnigraffle.OmniGraffleCreater;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
@@ -67,7 +66,7 @@
  */
 
 public class commandline {
-    Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTraverser());
+    Jungle jungle = new DefaultJungle(null, "hoge");
 
     public void start() throws IOException, InterruptedException {
         System.out.println("jungle 対話モード");
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/core/App.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/core/App.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,9 +2,8 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -19,7 +18,7 @@
 {
     public static void main( String[] args )
     {
-    	DefaultJungle jungle = new DefaultJungle(null,"sample",new DefaultTraverser());
+    	DefaultJungle jungle = new DefaultJungle(null,"sample");
     	jungle.createNewTree("hoge");
     	JungleTree tree = jungle.getTreeByName("hoge");
     	JungleTreeEditor editor = tree.getJungleTreeEditor();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/query/traverser/RedBlackTreeInterfaceTraverser.java	Thu Jan 26 15:23:25 2017 +0900
@@ -0,0 +1,137 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.query.traverser;
+
+import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.Query;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.DefaultNodeIterator;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.RedBlackTreeNodeIterator;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.index.Index;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.index.ParentIndex;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
+
+import java.util.Iterator;
+
+
+public class RedBlackTreeInterfaceTraverser implements InterfaceTraverser {
+    private TreeNode root;
+
+    public RedBlackTreeInterfaceTraverser(TreeNode root) {
+        this.root = root;
+    }
+
+    @Override
+    public Index getIndex() {
+        return null; //使わない 赤黒木は自身がIndexなので、特別なIndexは無い
+    }
+
+    @Override
+    public ParentIndex getParentIndex() {
+        return null; // 上に同じ、回転処理で構造が変わるため、自身の木構造でデータを表現しない、つまり親を知る必要はない
+    }
+
+    @Override
+    public void createIndex() { // 上に同じ Indexを張る必要はない
+    }
+
+    @Override
+    public void updateIndex(List<TreeNode> editedNodeList) { //上に同じ
+
+    }
+
+    @Override
+    public void updateIndex(TreeNode subTreeRoot) { //上に同じ
+
+    }
+
+    @Override
+    public Iterator<TreeNode> find(Query query) { //balanceKeyを使わない場合全探索なのでDefaultInterfaceTraverserと変わらない
+        Iterator<TreeNode> nodeIterator = new DefaultNodeIterator(root);
+        TreeNode firstMatchNode = null;
+        for (; nodeIterator.hasNext(); ) {
+            firstMatchNode = nextmatch(nodeIterator.next(), query);
+            if (firstMatchNode != null)
+                break;
+        }
+
+        final TreeNode finalFirstMatchNode = firstMatchNode;
+
+        return new Iterator<TreeNode>() {
+
+            TreeNode matchNode = finalFirstMatchNode;
+
+            @Override
+            public boolean hasNext() {
+                if (matchNode == null) {
+                    return false;
+                }
+                return true;
+            }
+
+            @Override
+            public TreeNode next() {
+                TreeNode currentPair = matchNode;
+                for (; nodeIterator.hasNext(); ) {
+                    matchNode = nextmatch(nodeIterator.next(), query);
+                    if (matchNode != null)
+                        return currentPair;
+                }
+                matchNode = null;
+                return currentPair;
+            }
+
+            @Override
+            public void remove() {
+            }
+
+        };
+    }
+
+    @Override
+    public Iterator<TreeNode> find(Query query, String key, String searchValue) {
+        Iterator<TreeNode> nodeIterator = new RedBlackTreeNodeIterator(root,key,searchValue);
+        TreeNode firstMatchNode = null;
+        for (; nodeIterator.hasNext(); ) {
+            firstMatchNode = nextmatch(nodeIterator.next(), query);
+            if (firstMatchNode != null)
+                break;
+        }
+
+        final TreeNode finalFirstMatchNode = firstMatchNode;
+
+        return new Iterator<TreeNode>() {
+
+            TreeNode matchNode = finalFirstMatchNode;
+
+            @Override
+            public boolean hasNext() {
+                if (matchNode == null) {
+                    return false;
+                }
+                return true;
+            }
+
+            @Override
+            public TreeNode next() {
+                TreeNode currentPair = matchNode;
+                for (; nodeIterator.hasNext(); ) {
+                    matchNode = nextmatch(nodeIterator.next(), query);
+                    if (matchNode != null)
+                        return currentPair;
+                }
+                matchNode = null;
+                return currentPair;
+            }
+
+            @Override
+            public void remove() {
+            }
+
+        };
+    }
+
+    private TreeNode nextmatch(TreeNode node, Query query) {
+        if (query.condition(node))
+            return node;
+        return null;
+    }
+}
+
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/query/traverser/RedBlackTreeTraverser.java	Thu Jan 26 03:44:21 2017 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-package jp.ac.u_ryukyu.ie.cr.jungle.query.traverser;
-
-import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
-import jp.ac.u_ryukyu.ie.cr.jungle.query.Query;
-import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.DefaultNodeIterator;
-import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.RedBlackTreeNodeIterator;
-import jp.ac.u_ryukyu.ie.cr.jungle.store.index.Index;
-import jp.ac.u_ryukyu.ie.cr.jungle.store.index.ParentIndex;
-import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-
-import java.util.Iterator;
-
-
-public class RedBlackTreeTraverser implements InterfaceTraverser {
-    private TreeNode root;
-
-    public RedBlackTreeTraverser(TreeNode root) {
-        this.root = root;
-    }
-
-    @Override
-    public Index getIndex() {
-        return null; //使わない 赤黒木は自身がIndexなので、特別なIndexは無い
-    }
-
-    @Override
-    public ParentIndex getParentIndex() {
-        return null; // 上に同じ、回転処理で構造が変わるため、自身の木構造でデータを表現しない、つまり親を知る必要はない
-    }
-
-    @Override
-    public void createIndex() { // 上に同じ Indexを張る必要はない
-    }
-
-    @Override
-    public void updateIndex(List<TreeNode> editedNodeList) { //上に同じ
-
-    }
-
-    @Override
-    public void updateIndex(TreeNode subTreeRoot) { //上に同じ
-
-    }
-
-    @Override
-    public Iterator<TreeNode> find(Query query) { //balanceKeyを使わない場合全探索なのでDefaultInterfaceTraverserと変わらない
-        Iterator<TreeNode> nodeIterator = new DefaultNodeIterator(root);
-        TreeNode firstMatchNode = null;
-        for (; nodeIterator.hasNext(); ) {
-            firstMatchNode = nextmatch(nodeIterator.next(), query);
-            if (firstMatchNode != null)
-                break;
-        }
-
-        final TreeNode finalFirstMatchNode = firstMatchNode;
-
-        return new Iterator<TreeNode>() {
-
-            TreeNode matchNode = finalFirstMatchNode;
-
-            @Override
-            public boolean hasNext() {
-                if (matchNode == null) {
-                    return false;
-                }
-                return true;
-            }
-
-            @Override
-            public TreeNode next() {
-                TreeNode currentPair = matchNode;
-                for (; nodeIterator.hasNext(); ) {
-                    matchNode = nextmatch(nodeIterator.next(), query);
-                    if (matchNode != null)
-                        return currentPair;
-                }
-                matchNode = null;
-                return currentPair;
-            }
-
-            @Override
-            public void remove() {
-            }
-
-        };
-    }
-
-    @Override
-    public Iterator<TreeNode> find(Query query, String key, String searchValue) {
-        Iterator<TreeNode> nodeIterator = new RedBlackTreeNodeIterator(root,key,searchValue);
-        TreeNode firstMatchNode = null;
-        for (; nodeIterator.hasNext(); ) {
-            firstMatchNode = nextmatch(nodeIterator.next(), query);
-            if (firstMatchNode != null)
-                break;
-        }
-
-        final TreeNode finalFirstMatchNode = firstMatchNode;
-
-        return new Iterator<TreeNode>() {
-
-            TreeNode matchNode = finalFirstMatchNode;
-
-            @Override
-            public boolean hasNext() {
-                if (matchNode == null) {
-                    return false;
-                }
-                return true;
-            }
-
-            @Override
-            public TreeNode next() {
-                TreeNode currentPair = matchNode;
-                for (; nodeIterator.hasNext(); ) {
-                    matchNode = nextmatch(nodeIterator.next(), query);
-                    if (matchNode != null)
-                        return currentPair;
-                }
-                matchNode = null;
-                return currentPair;
-            }
-
-            @Override
-            public void remove() {
-            }
-
-        };
-    }
-
-    private TreeNode nextmatch(TreeNode node, Query query) {
-        if (query.condition(node))
-            return node;
-        return null;
-    }
-}
-
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/logger/LoggingChildren.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/logger/LoggingChildren.java	Thu Jan 26 15:23:25 2017 +0900
@@ -75,4 +75,5 @@
         LoggingNode logNode = new LoggingNode(node);
         return DefaultEither.newB(logNode);
     }
+
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/DefaultNodePath.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/DefaultNodePath.java	Thu Jan 26 15:23:25 2017 +0900
@@ -4,6 +4,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
 import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
 
+import java.nio.ByteBuffer;
 import java.util.Iterator;
 
 public class DefaultNodePath implements NodePath {
@@ -112,8 +113,13 @@
     }
 
     @Override
-    public String getValue() {
+    public ByteBuffer getValue() {
         return null;
     }
 
+    @Override
+    public PathType getPathType() {
+        return PathType.Default;
+    }
+
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/NodePath.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/NodePath.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,6 +2,8 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
 
+import java.nio.ByteBuffer;
+
 public interface NodePath extends Iterable<Integer>
 {
 	public int get(int index);
@@ -12,5 +14,6 @@
 	public Pair<Integer,NodePath> last();
     public NodePath addHead(int pos);
 	public String getKey();
-	public String getValue();
+	public ByteBuffer getValue();
+	public PathType getPathType();
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/PathType.java	Thu Jan 26 15:23:25 2017 +0900
@@ -0,0 +1,5 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath;
+
+public enum PathType {
+    Default,RedBlack
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/RedBlackTreeNodePath.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/RedBlackTreeNodePath.java	Thu Jan 26 15:23:25 2017 +0900
@@ -4,18 +4,37 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.NulIterator;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
 
+import java.nio.ByteBuffer;
 import java.util.Iterator;
 
 public class RedBlackTreeNodePath implements NodePath {
 
     private final String key;
-    private final String value;
+    private final ByteBuffer value;
+    /**
+     * traverserを使うかどうかのフラグ
+     * -2だった場合Traverserを使わない
+     * 主にノードの追加、削除等回転処理が行われる処理の場合に使う
+     * <p>
+     * それ以外の値だった場合Traverserを使う
+     * Attribute関係とか
+     * intの理由はgetで受け取れるから
+     * <p>
+     * flagはaddでセットする
+     * ココらへんは後でちゃんと直す
+     */
+    private int flags;
 
-    private RedBlackTreeNodePath(String key,String value) {
+    public RedBlackTreeNodePath(String key, ByteBuffer value) {
         this.key = key;
         this.value = value;
     }
 
+    private RedBlackTreeNodePath(String key, ByteBuffer value, int flags) {
+        this.key = key;
+        this.value = value;
+        this.flags = flags;
+    }
 
     @Override
     public String getKey() {
@@ -23,10 +42,15 @@
     }
 
     @Override
-    public String getValue() {
+    public ByteBuffer getValue() {
         return value;
     }
 
+    @Override
+    public PathType getPathType() {
+        return PathType.RedBlack;
+    }
+
     //以下使わない
     @Override
     public Iterator<Integer> iterator() {
@@ -35,12 +59,12 @@
 
     @Override
     public int get(int index) {
-        return -2;
+        return flags;
     }
 
     @Override
     public NodePath add(int pos) {
-        return null;
+        return new RedBlackTreeNodePath(key, value, pos);
     }
 
     @Override
@@ -60,7 +84,7 @@
 
     @Override
     public String toString() {
-        return key + value ;
+        return key + value;
     }
 
     @Override
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/omnigraffle/App.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/omnigraffle/App.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,7 +2,6 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.xml.reader.XmlReader;
 import org.xml.sax.SAXException;
@@ -17,7 +16,7 @@
 
     public static void main(String args[]) throws IOException, SAXException, ParserConfigurationException, URISyntaxException, TransformerException {
 
-        Jungle jungle = new DefaultJungle(null, "hoge",new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hoge");
         JungleTree tree = jungle.createNewTree("tree");
         if (tree == null)
             tree = jungle.getTreeByName("tree");
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultJungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultJungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -93,11 +93,6 @@
     }
 
     @Override
-    public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String Key, ByteBuffer value) {
-        return null; //未実装
-    }
-
-    @Override
     public Either<Error, JungleTreeEditor> putAttribute(NodePath _path, String _key, ByteBuffer _value) {
         PutAttribute putAttribute = new PutAttribute(_key, _value);
         return _edit(_path, putAttribute);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DifferenceJungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DifferenceJungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -108,10 +108,6 @@
         return _edit(_path, deleteChildAt);
     }
 
-    @Override
-    public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String Key, ByteBuffer value) {
-        return null; //未実装
-    }
 
     @Override
     public Either<Error, JungleTreeEditor> putAttribute(NodePath _path, String _key, ByteBuffer _value) {
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/JungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/JungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -15,8 +15,6 @@
 
     public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos);
 
-    public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String Key, ByteBuffer value);
-
     public Either<Error, JungleTreeEditor> putAttribute(NodePath path, String key, ByteBuffer value);
 
     public Either<Error, JungleTreeEditor> deleteAttribute(NodePath path, String key);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,6 +7,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.PathType;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.DefaultTreeOperation;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.TreeOperation;
@@ -95,26 +96,23 @@
 
     @Override
     public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos) {
-        //   RedBlackTreeDeleteChildAt deleteChildAt = new RedBlackTreeDeleteChildAt(pos, path); 未実装
-        //   NodePath dummyPath = new DefaultNodePath(-2);
-        return null;//_edit(dummyPath, deleteChildAt);
+        String key = path.getKey();
+        if (!key.equals(balanceKey))
+            return DefaultEither.newA(INVALID_ARGUMENT);
+        ByteBuffer value = path.getValue();
+        RedBlackTreeDeleteChildAt deleteChildAt = new RedBlackTreeDeleteChildAt(key, value);
+        return _edit(path, deleteChildAt);
     }
 
     @Override
-    public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String key, ByteBuffer value) {
-        if (!key.equals(balanceKey))
+    public Either<Error, JungleTreeEditor> putAttribute(NodePath path, String key, ByteBuffer value) {
+        if (key.equals(balanceKey))
             return DefaultEither.newA(INVALID_ARGUMENT);
-        path = new DefaultNodePath(-2); //dummyのPathを作る これはtraverserを避けるために使う
-        RedBlackTreeDeleteChildAt deleteChildAt = new RedBlackTreeDeleteChildAt(key, value);
-        return edit(path, deleteChildAt); //未実装
-    }
-
-    @Override
-    public Either<Error, JungleTreeEditor> putAttribute(NodePath _path, String _key, ByteBuffer _value) {
-        if (_key.equals(balanceKey))
+        if (path.getPathType() != PathType.RedBlack)
             return DefaultEither.newA(INVALID_ARGUMENT);
-        PutAttribute putAttribute = new PutAttribute(_key, _value);
-        return _edit(_path, putAttribute);
+        NodeEditor editor = new PutAttribute(key, value);
+        NodePath newParh = path.add(-1); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
+        return _edit(newParh, editor);
     }
 
     @Override
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/treeEditor/RedBlackTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/treeEditor/RedBlackTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -26,7 +26,7 @@
     public Either<Error, LoggingNode> edit(TreeNode root, NodePath path, NodeEditor editor) {
         if (path.get(0) == -2)
             return redBlackTreeNodeEdit(root, editor);
-        Evaluator e = new DefaultEvaluator(path);
+        Evaluator e = new RedBlackTreeEvaluator(path);
         Either<Error, Traversal> traverseEither = traverser.traverse(root, e);
         if (traverseEither.isA()) {
             return DefaultEither.newA(traverseEither.a());
@@ -42,6 +42,8 @@
         return clone(newWrap, traversal, editor);
     }
 
+
+
     private Either<Error, LoggingNode> redBlackTreeNodeEdit(TreeNode root, NodeEditor editor) {
         return editor.edit(root);
     }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/RedBlackTreeTransactionManager.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/manager/RedBlackTreeTransactionManager.java	Thu Jan 26 15:23:25 2017 +0900
@@ -4,7 +4,7 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.InterfaceTraverser;
-import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.RedBlackTreeTraverser;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.RedBlackTreeInterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.TreeContext;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.TreeOperation;
@@ -61,7 +61,7 @@
 
         };
 
-        InterfaceTraverser traverser = new RedBlackTreeTraverser(newRoot);
+        InterfaceTraverser traverser = new RedBlackTreeInterfaceTraverser(newRoot);
         TreeContext newTreeContext = new DefaultTreeContext(newRoot, tip, list, uuid, _treeName, nextRevision, traverser);
 
         if (repository.compareAndSet(newTreeContext.prev(), newTreeContext)) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/RedBlackTreeEvaluator.java	Thu Jan 26 15:23:25 2017 +0900
@@ -0,0 +1,42 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.traverser;
+
+import jp.ac.u_ryukyu.ie.cr.jungle.core.Attributes;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
+
+/**
+ * Created by e115731 on 2017/01/26.
+ */
+public class RedBlackTreeEvaluator implements Evaluator {
+    private final String key;
+    private final long v1;
+
+    public RedBlackTreeEvaluator(NodePath path) {
+        this.key = path.getKey();
+        this.v1 = path.getValue().hashCode();
+    }
+
+    public RedBlackTreeEvaluator(String key, long searchValueHash) {
+        this.key = key;
+        this.v1 = searchValueHash;
+    }
+
+    @Override
+    public Evaluation evaluate(TreeNode current, int pos) {
+        Attributes attribute = current.getAttributes();
+        long value = attribute.get(key).hashCode();
+        Result result = null;
+        Evaluator nextEvaluator = null;
+
+        if (value - v1 < 0) {
+            result = Result.LEFT;
+            nextEvaluator = new RedBlackTreeEvaluator(key, v1);
+        } else if (value - v1 > 0) {
+            result = Result.RIGHT;
+            nextEvaluator = new RedBlackTreeEvaluator(key, v1);
+        } else {
+            return new DefaultEvaluation(Result.GOAL, null);
+        }
+        return new DefaultEvaluation(result, nextEvaluator);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/RedBlackTreeTraverser.java	Thu Jan 26 15:23:25 2017 +0900
@@ -0,0 +1,128 @@
+package jp.ac.u_ryukyu.ie.cr.jungle.traverser;
+
+import jp.ac.u_ryukyu.ie.cr.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
+
+import java.util.Iterator;
+
+public class RedBlackTreeTraverser implements Traverser {
+    @Override
+    public Either<Error, Traversal> traverse(final TreeNode root, Evaluator evaluator) {
+        Either<Error, List<Direction<TreeNode>>> ret = _traverse(root, evaluator, -1);
+
+        if (ret.isA()) {
+            return DefaultEither.newA(ret.a());
+        }
+
+        List<Direction<TreeNode>> list = ret.b();
+
+        final Iterable<Direction<TreeNode>> iterable = list;
+        final TreeNode destination = ret.b().head().getTarget();
+
+        Traversal traversal = new Traversal() {
+            @Override
+            public Iterator<Direction<TreeNode>> iterator() {
+                return iterable.iterator();
+            }
+
+            @Override
+            public TreeNode destination() {
+                return destination;
+            }
+        };
+
+        return DefaultEither.newB(traversal);
+    }
+
+    private Either<Error, List<Direction<TreeNode>>> _traverse(TreeNode currentNode, Evaluator _evaluator, int pos) {
+        Evaluation e = _evaluator.evaluate(currentNode, pos);
+        Result r = e.result();
+        if (r == Result.LEFT) {
+            return left(currentNode, pos, e.evaluator());
+        }
+
+        if (r == Result.RIGHT) {
+            return right(currentNode, pos, e.evaluator());
+        }
+
+        if (r == Result.GOAL) {
+            return DefaultEither.newB(_goal(currentNode, pos));
+        }
+
+
+        return DefaultEither.newA(TraverserError.UNDEFINED_OPERATOR);
+    }
+
+    private List<Direction<TreeNode>> _goal(final TreeNode _current, final int _pos) {
+        Direction<TreeNode> d = new Direction<TreeNode>() {
+            @Override
+            public int getPosition() {
+                return _pos;
+            }
+
+            @Override
+            public TreeNode getTarget() {
+                return _current;
+            }
+        };
+
+        List<Direction<TreeNode>> list = new List();
+        List<Direction<TreeNode>> newList = list.addLast(d);
+
+        return newList;
+    }
+
+    private <T extends TreeNode> Either<Error, List<Direction<TreeNode>>> left(final T _current, final int _pos, Evaluator _evaluator) {
+        Children children = _current.getChildren();
+        TreeNode child = children.at(0).b();
+        Either<Error, List<Direction<TreeNode>>> either = _traverse(child, _evaluator, 0);
+        if (either.isA()) {
+            return either;
+        }
+
+        List<Direction<TreeNode>> list = either.b();
+        Direction<TreeNode> d = new Direction<TreeNode>() {
+            @Override
+            public int getPosition() {
+                return _pos;
+            }
+
+            @Override
+            public T getTarget() {
+                return _current;
+            }
+        };
+
+        List<Direction<TreeNode>> newList = list.addLast(d);
+        return DefaultEither.newB(newList);
+    }
+
+    private <T extends TreeNode> Either<Error, List<Direction<TreeNode>>> right(final T _current, final int _pos, Evaluator _evaluator) {
+        Children children = _current.getChildren();
+        TreeNode child = children.at(1).b();
+        Either<Error, List<Direction<TreeNode>>> either = _traverse(_current, _evaluator, 1);
+        if (either.isA()) {
+            return either;
+        }
+
+        List<Direction<TreeNode>> list = either.b();
+        Direction<TreeNode> d = new Direction<TreeNode>() {
+            @Override
+            public int getPosition() {
+                return _pos;
+            }
+
+            @Override
+            public T getTarget() {
+                return _current;
+            }
+        };
+
+        List<Direction<TreeNode>> newList = list.addLast(d);
+        return DefaultEither.newB(newList);
+    }
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/Result.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/traverser/Result.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,6 +8,9 @@
 	public static final Result BREAK = new Result("BREAK");
 	public static final Result GOAL = new Result("GOAL");
 	public static final Result SPECIAL = new Result("SPECIAL");
+	public static final Result LEFT = new Result("LEFT");
+	public static final Result RIGHT = new Result("RIGHT");
+
 	private final String name;
 	
 	private Result(String _name)
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/xml/reader/XmlReader.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/xml/reader/XmlReader.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,7 +2,6 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 
 import javax.xml.parsers.SAXParser;
@@ -13,7 +12,7 @@
 public class XmlReader {
     public static void main(String args[]) {
         String xmlPath = args[0];
-        Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hoge");
         JungleTree tree = jungle.createNewTree("XMLTEST");
         new XmlReader().start(xmlPath,tree);
     }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/operations/NetworkNodePath.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/operations/NetworkNodePath.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,9 +2,11 @@
 
 
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.PathType;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
 import org.msgpack.annotation.Message;
 
+import java.nio.ByteBuffer;
 import java.util.Iterator;
 import java.util.LinkedList;
 
@@ -97,7 +99,12 @@
     }
 
     @Override
-    public String getValue() {
+    public ByteBuffer getValue() {
         return null;
     }
+
+    @Override
+    public PathType getPathType() {
+        return PathType.Default;
+    }
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/persistent/PersistentJungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/persistent/PersistentJungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -91,11 +91,6 @@
     }
 
     @Override
-    public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String Key, ByteBuffer value) {
-        return null; //未実装
-    }
-
-    @Override
     public Either<Error, JungleTreeEditor> moveChild(NodePath path,int childNum, String move) {
         MoveChild movechild = new MoveChild(move, childNum);
         return _edit(path,movechild);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/transaction/NetworkDefaultJungleTreeEditor.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/transaction/NetworkDefaultJungleTreeEditor.java	Thu Jan 26 15:23:25 2017 +0900
@@ -113,10 +113,6 @@
 		return _edit(_path,deleteChildAt);
 	}
 
-	@Override
-	public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos, String Key, ByteBuffer value) {
-		return null; //未実装
-	}
 
 	@Override
 	public Either<Error,JungleTreeEditor> putAttribute(NodePath _path,String _key,ByteBuffer _value)
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetNodeOfPathTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetNodeOfPathTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -6,7 +6,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import junit.framework.Assert;
 import org.junit.Test;
@@ -18,7 +17,7 @@
 
     @Test
     public void getNodeOfPathTest() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetOldTreeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/GetOldTreeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -4,9 +4,8 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -19,7 +18,7 @@
 
   @Test
   public void getOldTreeTest() {
-    Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+    Jungle jungle = new DefaultJungle(null, "hogehoge");
     jungle.createNewTree("tree");
     JungleTree tree = jungle.getTreeByName("tree");
     JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/AppendChildAndPutAttributeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/AppendChildAndPutAttributeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -23,7 +22,7 @@
 public class AppendChildAndPutAttributeTest {
     @Test
     public void AppendChildAndPutAttribute() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/ReplaceRootNodeAt.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/nodeeditor/ReplaceRootNodeAt.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,9 +2,8 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -15,7 +14,7 @@
 
   @Test
   public void ReplaceRootNodeAtTest() {
-    Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTraverser());
+    Jungle jungle = new DefaultJungle(null, "hogehoge");
     jungle.createNewTree("tree");
     JungleTree tree = jungle.getTreeByName("tree");
     JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/DifferencialJungleTreeEditorTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/DifferencialJungleTreeEditorTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeAttributes;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeChildren;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -23,7 +22,7 @@
 public class DifferencialJungleTreeEditorTest {
     @Test
     public void DefaultJungleTreeEditorTests() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewDifferenceTree("df");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
         NodePath path = new DefaultNodePath();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/MultiDifferencialJngleTreeEditorTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/Difference/MultiDifferencialJngleTreeEditorTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -5,7 +5,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -21,7 +20,7 @@
 public class MultiDifferencialJngleTreeEditorTest {
     @Test
     public void MultiDifferencialJngleTreeEditorTests() throws InterruptedException {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewDifferenceTree("df");
         Thread t1 = new EditorThread(tree);
         Thread t2 = new EditorThread(tree);
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorAttributeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,11 +2,13 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.jungle.core.Attributes;
+import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.InterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.RedBlackTreeNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -14,13 +16,15 @@
 import org.junit.Test;
 
 import java.nio.ByteBuffer;
+import java.util.Iterator;
 
 public class RedBlackTreeEditorAttributeTest {
     @Test
     public void RedBlackTreeEditorAttribute(){
         String balanceKey = "balanceKey";
         String key = "key";
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        ByteBuffer testPutValue = ByteBuffer.wrap("test".getBytes());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey");
         NodePath path = new DefaultNodePath();
 
@@ -36,8 +40,8 @@
 
         JungleTreeEditor editor = tree.getJungleTreeEditor();
         path = path.add(1);
-        ByteBuffer value = ByteBuffer.wrap(path.toString().getBytes());
-        Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, value);
+        NodePath rbtPath = new RedBlackTreeNodePath(balanceKey,ByteBuffer.wrap(("value6".getBytes())));
+        Either<Error, JungleTreeEditor> either = editor.putAttribute(rbtPath, key, testPutValue);
         Assert.assertFalse(either.isA()); //AttributeのPutが成功したかどうか調べる
         editor = either.b();
         either = editor.success();
@@ -46,26 +50,47 @@
         JungleTree oldTree = tree.getOldTree(tree.revision() - 1).b();
         TreeNode oldRoot = oldTree.getRootNode();
         TreeNode attributePutedTreeRoot = tree.getRootNode();
-        Assert.assertNotEquals(attributePutedTreeRoot,oldRoot);// とりあえずルートがちゃんと入れ替えられているかを調べる
+        Assert.assertNotEquals(attributePutedTreeRoot,oldRoot);//// とりあえずルートがちゃんと入れ替えられているかを調べる
+
+
         TreeNode editedNode = tree.getNodeOfPath(path).b();
-        TreeNode editedOldNode = oldTree.getNodeOfPath(path).b();
-        String putValue = editedNode.getAttributes().getString(key);//編集したノードからputしたAttributeを取得
-        Assert.assertEquals(putValue,path.toString());
-        ByteBuffer nullValue = editedOldNode.getAttributes().get(key);//編集前のノードから値を取得 nullが取れる
-        Assert.assertNull(nullValue);
+        InterfaceTraverser traverser = tree.getTraverser(true);
+        Iterator<TreeNode> nodeIterator = traverser.find((TreeNode n) -> {
+            Attributes attributes = n.getAttributes();
+            ByteBuffer v = attributes.get(key);
+            return v != null && v.equals(testPutValue);
+        },balanceKey,"value6");
+        Assert.assertTrue(nodeIterator.hasNext());//PutAttributeの成功を確認
+
+
+        InterfaceTraverser oldTreeTraverser = oldTree.getTraverser(true);
+        nodeIterator = oldTreeTraverser.find((TreeNode n) -> {
+            Attributes attributes = n.getAttributes();
+            ByteBuffer v = attributes.get(key);
+            return v != null && v.equals(testPutValue);
+        },balanceKey,"value6");
+        Assert.assertFalse(nodeIterator.hasNext());//過去の木に値が入っていないことを確認
+
+
+
         ByteBuffer oldRootValue = oldRoot.getAttributes().get(balanceKey);
         ByteBuffer newRootValue = attributePutedTreeRoot.getAttributes().get(balanceKey);//rootとかがちゃんと複製されているかを調べる
         Assert.assertEquals(oldRootValue,newRootValue);
 
         editor = tree.getJungleTreeEditor();
-        either = editor.deleteAttribute(path,key);
+        either = editor.deleteAttribute(rbtPath,key);
         Assert.assertFalse(either.isA()); //Attributeのdeleteが成功したかどうか調べる
         editor = either.b();
         either = editor.success();
         Assert.assertFalse(either.isA());
 
-        TreeNode AttributeDeletedNode = tree.getNodeOfPath(path).b();//Attributeがちゃんと削除できたかを調べる
-        nullValue = AttributeDeletedNode.getAttributes().get(key);
-        Assert.assertNull(nullValue);
+
+        InterfaceTraverser valueDeletedTraverser = tree.getTraverser(true);
+        nodeIterator = valueDeletedTraverser.find((TreeNode n) -> {
+            Attributes attributes = n.getAttributes();
+            ByteBuffer v = attributes.get(key);
+            return v != null && v.equals(testPutValue);
+        },balanceKey,"value6");
+        Assert.assertFalse(nodeIterator.hasNext());//Attributeがちゃんと削除できたかを調べる
     }
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorNodeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/core/treeeditor/RedBlack/RedBlackTreeEditorNodeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -6,10 +6,10 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.nodeiterator.DefaultNodeIterator;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.RedBlackTreeNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.redBlackTree.ColorlessTreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -23,12 +23,12 @@
 
 public class RedBlackTreeEditorNodeTest {
 
-    int testCount = 1000;
+    int testCount = 10;
 
     @Test
     public void RedBlackTreeEditorNode() {
         String key = "balanceKey";
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey");
         NodePath path = new DefaultNodePath();
 
@@ -71,7 +71,8 @@
         for (int count = 1; count <= testCount; count++) {
             JungleTreeEditor editor = tree.getJungleTreeEditor();
             ByteBuffer value = ByteBuffer.wrap(("value" + count).getBytes());
-            Either<Error, JungleTreeEditor> either = editor.deleteChildAt(path, 0, key, value);
+            NodePath redBlackTreeNodePath = new RedBlackTreeNodePath(key,value);
+            Either<Error, JungleTreeEditor> either = editor.deleteChildAt(redBlackTreeNodePath, 0);
             Assert.assertFalse(either.isA());
             editor = either.b();
             either = editor.success();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/defaultnode/GetNodePath.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/defaultnode/GetNodePath.java	Thu Jan 26 15:23:25 2017 +0900
@@ -9,7 +9,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -22,7 +21,7 @@
 public class GetNodePath {
     @Test
     public void getNodePathTest(){
-        Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetKeysTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetKeysTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,7 +7,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -31,7 +30,7 @@
         for (String key : keys) {//keyのListの作成
             keyList.add(key);
         }
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey");
         NodePath path = new DefaultNodePath();
 
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetfilteringKeyTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/impl/redblacktreenode/GetfilteringKeyTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,7 +7,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -38,7 +37,7 @@
         List<String> filterKeysList = createKeyList(filterKeys);
 
 
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewRedBlackTree("TreeName", "balanceKey");
         NodePath path = new DefaultNodePath();
 
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/IndexTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/IndexTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -11,7 +11,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeAttributes;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -34,7 +33,7 @@
         String key = "key";
         String indexKey = "indexKey";
         String addAttributeKey = "addAttributeKey";
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/ParentIndexPutTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/defaultTree/ParentIndexPutTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -9,7 +9,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -33,7 +32,7 @@
     private String addAttributeKey = "addAttributeKey";
     @Test
     public void ParentIndexPut() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.getTreeByName("tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/IndexTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/IndexTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -10,7 +10,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -28,7 +27,7 @@
 
     @Test
     public void Index() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.createNewDifferenceTree("Tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/ParentIndexPutTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/index/difference/ParentIndexPutTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -24,7 +23,7 @@
 
     @Test
     public void ParentIndexPut() {
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         jungle.createNewTree("tree");
         JungleTree tree = jungle.createNewDifferenceTree("Tree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DefaultInterfaceTraverserTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DefaultInterfaceTraverserTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -7,7 +7,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import junit.framework.Assert;
 import org.junit.Test;
@@ -22,7 +21,7 @@
     public static String indexKey = "INDEXKEY";
     @Test
     public void InterfaseTraverserTest() {
-        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge");
         jungle.createNewTree("TestTree");
         JungleTree tree = jungle.getTreeByName("TestTree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DifferentialInterfaceTraverserTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/DifferentialInterfaceTraverserTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.DifferenceListJungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
@@ -31,7 +30,7 @@
     public void DifferentialInterfaceTraverserTests1() {
         String key = "key";
         String indexKey = "indexKey";
-        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge");
 
         List<Integer> list = Arrays.asList(0,1,2);
         test(key,indexKey,jungle,list,2);
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/RedBlackInterfaceTraverserTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/traverse/RedBlackInterfaceTraverserTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -23,7 +22,7 @@
 
     @Test
     public void RedBlackInterfaceTraverserTests() {
-        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(new NullJournal(), "hoge");
         jungle.createNewRedBlackTree("RedBlackTree", balanceKey);
         JungleTree tree = jungle.getTreeByName("RedBlackTree");
         JungleTreeEditor editor = tree.getJungleTreeEditor();
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DefaultTree/DefaultJungleTreeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DefaultTree/DefaultJungleTreeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -5,7 +5,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error;
@@ -16,7 +15,7 @@
 
 public class DefaultJungleTreeTest extends TestCase {
   public Jungle instance() {
-    Jungle j = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+    Jungle j = new DefaultJungle(null, "hogehoge");
     return j;
   }
 
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DifferencialTree/DifferencialJungleTreeTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DifferencialTree/DifferencialJungleTreeTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -2,7 +2,6 @@
 
 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
 import org.junit.Assert;
 import org.junit.Test;
@@ -10,7 +9,7 @@
 public class DifferencialJungleTreeTest {
     @Test
     public void DefferenceTreeTest(){
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         JungleTree tree = jungle.createNewDifferenceTree("df");
         Assert.assertNotNull(tree);
         tree = jungle.getTreeByName("df");
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/JungleTreeCreaterTest.java	Thu Jan 26 03:44:21 2017 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/JungleTreeCreaterTest.java	Thu Jan 26 15:23:25 2017 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -18,7 +17,7 @@
     public void JungleTreeCreate() {
         String key = "key";
         String indexKey = "indexKey";
-        Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTraverser());
+        Jungle jungle = new DefaultJungle(null, "hogehoge");
         for (int count = 1; count <= 10; count++) {
             int maxNodeCount = count * 10;
             JungleTree tree = jungle.createNewTree("Tree" + count);