changeset 7:4e1f8f434648

Read refactoring
author one
date Tue, 01 Apr 2014 04:35:08 +0900
parents 6954add9eea9
children 442463aa27e5
files src/main/java/example/ReadThread.java src/main/java/example/SimpleJungleRead.java
diffstat 2 files changed, 68 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- 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<DefaultNodePath> paths;
 
-	ReadThread(Jungle j, int roopCount) {
+	ReadThread(Jungle j, int roopCount, List<DefaultNodePath> 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<Node> traversable = new TraversableNodeWrapper<Node>(
+				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<Node> traversable = new TraversableNodeWrapper<Node>(
-						tree.getRootNode());
-				Either<Error, Traversal<TraversableNodeWrapper<Node>>> result = traverser
+				Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser
 						.traverse(traversable, evaluator);
-				if (result.isA()) {
+				if (ret.isA()) {
 					Assert.fail();
 				}
-				Traversal<TraversableNodeWrapper<Node>> traversal = result.b();
+
+				Traversal<TraversableNodeWrapper<Node>> traversal = ret.b();
 				TraversableNodeWrapper<Node> 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<DefaultNodePath> 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());
-				}
-			}
 		}
+
 		// ここまで処理
 	}
 }
--- 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<Error, JungleTreeEditor> 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<DefaultNodePath> 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<Node> children = node.getChildren();
-		Either<Error, Node> either2 = children.at(1);
-		// ここからしたまでテスト
-		Node childNod = either2.b();
-		children = childNod.getChildren();
-		either2 = children.at(1);
-		// ここまでてすと
-		if (either2.isA()) {
-			Assert.fail();
+	}
+
+	public static List<DefaultNodePath> generatePathPattern(
+			DefaultNodePath _cur, int _curHeight, int _maxHeight) {
+		List<DefaultNodePath> paths = List.nil();
+		for (int p = 0; p <= _curHeight && p < 2; p++) {
+			DefaultNodePath path = _cur.add(p);
+			if (_curHeight != _maxHeight - 1) {
+				List<DefaultNodePath> 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<Error, JungleTreeEditor> 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<Error, JungleTreeEditor> 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();
+	}
 }