# HG changeset patch # User one # Date 1396294508 -32400 # Node ID 4e1f8f4346480ba181686f77c455fbc7b06f9ac2 # Parent 6954add9eea9fcdc960ee1274f403e04c2c04775 Read refactoring diff -r 6954add9eea9 -r 4e1f8f434648 src/main/java/example/ReadThread.java --- a/src/main/java/example/ReadThread.java Mon Mar 31 07:00:11 2014 +0900 +++ b/src/main/java/example/ReadThread.java Tue Apr 01 04:35:08 2014 +0900 @@ -2,6 +2,7 @@ import java.nio.ByteBuffer; +import fj.data.List; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; @@ -18,48 +19,39 @@ public static final String key = "name"; int roopCount; Jungle j; + List paths; - ReadThread(Jungle j, int roopCount) { + ReadThread(Jungle j, int roopCount, List paths) { this.roopCount = roopCount; + System.out.println(roopCount); + this.paths = paths; this.j = j; } public void run() { JungleTree tree = j.getTreeByName("tree"); + DefaultTraverser traverser = new DefaultTraverser(); + TraversableNodeWrapper traversable = new TraversableNodeWrapper( + tree.getRootNode()); for (int count = 0; count < roopCount; count++) { - for (int x = 0; x < 2; x++) { - DefaultNodePath path = new DefaultNodePath(); - path = path.add(x); + for (DefaultNodePath path : paths) { DefaultEvaluator evaluator = new DefaultEvaluator(path); - DefaultTraverser traverser = new DefaultTraverser(); - TraversableNodeWrapper traversable = new TraversableNodeWrapper( - tree.getRootNode()); - Either>> result = traverser + Either>> ret = traverser .traverse(traversable, evaluator); - if (result.isA()) { + if (ret.isA()) { Assert.fail(); } - Traversal> traversal = result.b(); + + Traversal> traversal = ret.b(); TraversableNodeWrapper target = traversal.destination(); ByteBuffer value = target.getWrapped().getAttributes().get(key); - String actual = new String(value.array()); - //System.out.println("値=" + actual); - for (int y = 0; y < 2; y++) { - path = new DefaultNodePath(); - path = path.add(x).add(y); - evaluator = new DefaultEvaluator(path); + String actual = new String(value.array()); + System.out.println(actual); + // List parts = path.inits(); + } - result = traverser.traverse(traversable, evaluator); - if (result.isA()) { - Assert.fail(); - } - traversal = result.b(); - target = traversal.destination(); - value = target.getWrapped().getAttributes().get(key); - actual = new String(value.array()); - } - } } + // ここまで処理 } } diff -r 6954add9eea9 -r 4e1f8f434648 src/main/java/example/SimpleJungleRead.java --- a/src/main/java/example/SimpleJungleRead.java Mon Mar 31 07:00:11 2014 +0900 +++ b/src/main/java/example/SimpleJungleRead.java Tue Apr 01 04:35:08 2014 +0900 @@ -2,17 +2,14 @@ import java.nio.ByteBuffer; +import fj.data.List; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; @@ -35,34 +32,21 @@ new DefaultTraverser())); j.createNewTree("tree");// 木を作った JungleTree tree = j.getTreeByName("tree");// 名前を取得 - JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得 - NodePath root = new DefaultNodePath();// パスの取得 - - // eitherに値を入れる - Either either = editor1.putAttribute(root, - key, value); - if (either.isA()) {// 失敗した場合Aが出てくる - Assert.fail(); - } - editor1 = either.b(); - editor1.success(); - // ここで初めてSUCCESS - - Node node = tree.getRootNode(); - ByteBuffer v = node.getAttributes().get(key); - System.out.println(new String(v.array())); + // JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得 + // NodePath root = new DefaultNodePath();// パスの取得 // ------子ノードの追加 + List paths = generatePathPattern( + new DefaultNodePath(), 0, 3); CreateTree(tree); // ここまでノードの追加 - long t1 = System.currentTimeMillis();// 時間の測定開始 - // ここで処理を行う for (int count = 0; count < threadCount; count++) { - wt[count] = new ReadThread(j,(roopCount / threadCount)); + wt[count] = new ReadThread(j, (roopCount / threadCount), paths); } + long t1 = System.currentTimeMillis();// 時間の測定開始 for (int count = 0; count < threadCount; count++) { wt[count].start(); } @@ -73,82 +57,64 @@ } catch (InterruptedException e) { } } - - + long t2 = System.currentTimeMillis(); System.out.println(t2 - t1 + "s"); - node = tree.getRootNode(); - Children children = node.getChildren(); - Either either2 = children.at(1); - // ここからしたまでテスト - Node childNod = either2.b(); - children = childNod.getChildren(); - either2 = children.at(1); - // ここまでてすと - if (either2.isA()) { - Assert.fail(); + } + + public static List generatePathPattern( + DefaultNodePath _cur, int _curHeight, int _maxHeight) { + List paths = List.nil(); + for (int p = 0; p <= _curHeight && p < 2; p++) { + DefaultNodePath path = _cur.add(p); + if (_curHeight != _maxHeight - 1) { + List newpaths = generatePathPattern(path, + _curHeight + 1, _maxHeight); + paths = paths.append(newpaths); + } + paths = paths.cons(path); } - Node childNode = either2.b(); - ByteBuffer v2 = childNode.getAttributes().get(key); - System.out.println(new String(v2.array())); + return paths; } - public static DefaultTreeNode factory = new DefaultTreeNode( - new DefaultNode()); - public static void CreateTree(JungleTree tree) { NodePath root = new DefaultNodePath(); - JungleTreeEditor editor1;// Treeのeditorを作成 - Either either; + CreateChildren(tree, root, 0); for (int x = 0; x < 2; x++) { // ノードの追加 - editor1 = tree.getTreeEditor(); - either = editor1.addNewChildAt(root, x);// 新しく入れるところへのパス - if (either.isA()) {// ちゃんとパスを指定できたかチェック - Assert.fail(); - } - editor1 = either.b();// 成功した場合パスを入れる - // NodePath childPath = root.add(x); - either = editor1.success(); - if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる - Assert.fail(); - } - // ここまでノードの追加 - NodePath childPath = root.add(x); - JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成 - either = editor.putAttribute(childPath, key, - ByteBuffer.wrap("Blazblue".getBytes())); - if (either.isA()) { - Assert.fail(); - } - editor = either.b(); - either = editor.success(); + CreateChildren(tree, root.add(0), x); for (int y = 0; y < 2; y++) { - editor1 = tree.getTreeEditor(); - either = editor1.addNewChildAt(root.add(x), y);// 新しく入れるところへのパス - if (either.isA()) {// ちゃんとパスを指定できたかチェック - Assert.fail(); - } - editor1 = either.b();// 成功した場合パスを入れる - // childPath = root.add(y); - either = editor1.success(); - if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる - Assert.fail(); - } - childPath = root.add(x).add(y); - editor = tree.getTreeEditor();// Treeのeditorを作成 - either = editor.putAttribute(childPath, key, - ByteBuffer.wrap("Blazblues".getBytes())); - if (either.isA()) { - Assert.fail(); - } - editor = either.b(); - either = editor.success(); + CreateChildren(tree, root.add(0).add(x), y); } } } + + public static void CreateChildren(JungleTree tree, NodePath root, int num) { + JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成 + Either either = editor.addNewChildAt(root, + num); // 新しく入れるところへのパス + if (either.isA()) {// ちゃんとパスを指定できたかチェック + Assert.fail(); + } + editor = either.b();// 成功した場合パスを入れる + // NodePath childPath = root.add(x); + either = editor.success(); + if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる + Assert.fail(); + } + // ここまでノードの追加 + NodePath childPath = root.add(num); + editor = tree.getTreeEditor();// Treeのeditorを作成 + either = editor.putAttribute(childPath, key, + ByteBuffer.wrap("Blazblue".getBytes())); + if (either.isA()) { + Assert.fail(); + } + editor = either.b(); + either = editor.success(); + } }