comparison src/main/java/example/SimpleJungleRead.java @ 7:4e1f8f434648

Read refactoring
author one
date Tue, 01 Apr 2014 04:35:08 +0900
parents 6954add9eea9
children 442463aa27e5
comparison
equal deleted inserted replaced
6:6954add9eea9 7:4e1f8f434648
1 package example; 1 package example;
2 2
3 import java.nio.ByteBuffer; 3 import java.nio.ByteBuffer;
4 4
5 import fj.data.List;
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; 6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
19 import junit.framework.Assert; 16 import junit.framework.Assert;
20 17
33 ReadThread[] wt = new ReadThread[threadCount]; 30 ReadThread[] wt = new ReadThread[threadCount];
34 Jungle j = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor( 31 Jungle j = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor(
35 new DefaultTraverser())); 32 new DefaultTraverser()));
36 j.createNewTree("tree");// 木を作った 33 j.createNewTree("tree");// 木を作った
37 JungleTree tree = j.getTreeByName("tree");// 名前を取得 34 JungleTree tree = j.getTreeByName("tree");// 名前を取得
38 JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得 35 // JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得
39 NodePath root = new DefaultNodePath();// パスの取得 36 // NodePath root = new DefaultNodePath();// パスの取得
40
41 // eitherに値を入れる
42 Either<Error, JungleTreeEditor> either = editor1.putAttribute(root,
43 key, value);
44 if (either.isA()) {// 失敗した場合Aが出てくる
45 Assert.fail();
46 }
47 editor1 = either.b();
48 editor1.success();
49 // ここで初めてSUCCESS
50
51 Node node = tree.getRootNode();
52 ByteBuffer v = node.getAttributes().get(key);
53 System.out.println(new String(v.array()));
54 37
55 // ------子ノードの追加 38 // ------子ノードの追加
39 List<DefaultNodePath> paths = generatePathPattern(
40 new DefaultNodePath(), 0, 3);
56 CreateTree(tree); 41 CreateTree(tree);
57 // ここまでノードの追加 42 // ここまでノードの追加
58
59 long t1 = System.currentTimeMillis();// 時間の測定開始
60 43
61 // ここで処理を行う 44 // ここで処理を行う
62 45
63 for (int count = 0; count < threadCount; count++) { 46 for (int count = 0; count < threadCount; count++) {
64 wt[count] = new ReadThread(j,(roopCount / threadCount)); 47 wt[count] = new ReadThread(j, (roopCount / threadCount), paths);
65 } 48 }
49 long t1 = System.currentTimeMillis();// 時間の測定開始
66 for (int count = 0; count < threadCount; count++) { 50 for (int count = 0; count < threadCount; count++) {
67 wt[count].start(); 51 wt[count].start();
68 } 52 }
69 53
70 for (int count = 0; count < threadCount; count++) { 54 for (int count = 0; count < threadCount; count++) {
71 try { 55 try {
72 wt[count].join(); 56 wt[count].join();
73 } catch (InterruptedException e) { 57 } catch (InterruptedException e) {
74 } 58 }
75 } 59 }
76 60
77
78 long t2 = System.currentTimeMillis(); 61 long t2 = System.currentTimeMillis();
79 System.out.println(t2 - t1 + "s"); 62 System.out.println(t2 - t1 + "s");
80 63
81 node = tree.getRootNode(); 64 }
82 Children<Node> children = node.getChildren(); 65
83 Either<Error, Node> either2 = children.at(1); 66 public static List<DefaultNodePath> generatePathPattern(
84 // ここからしたまでテスト 67 DefaultNodePath _cur, int _curHeight, int _maxHeight) {
85 Node childNod = either2.b(); 68 List<DefaultNodePath> paths = List.nil();
86 children = childNod.getChildren(); 69 for (int p = 0; p <= _curHeight && p < 2; p++) {
87 either2 = children.at(1); 70 DefaultNodePath path = _cur.add(p);
88 // ここまでてすと 71 if (_curHeight != _maxHeight - 1) {
89 if (either2.isA()) { 72 List<DefaultNodePath> newpaths = generatePathPattern(path,
90 Assert.fail(); 73 _curHeight + 1, _maxHeight);
74 paths = paths.append(newpaths);
75 }
76 paths = paths.cons(path);
91 } 77 }
92 78
93 Node childNode = either2.b(); 79 return paths;
94 ByteBuffer v2 = childNode.getAttributes().get(key);
95 System.out.println(new String(v2.array()));
96 } 80 }
97
98 public static DefaultTreeNode factory = new DefaultTreeNode(
99 new DefaultNode());
100 81
101 public static void CreateTree(JungleTree tree) { 82 public static void CreateTree(JungleTree tree) {
102 NodePath root = new DefaultNodePath(); 83 NodePath root = new DefaultNodePath();
103 JungleTreeEditor editor1;// Treeのeditorを作成 84 CreateChildren(tree, root, 0);
104 Either<Error, JungleTreeEditor> either;
105 85
106 for (int x = 0; x < 2; x++) { 86 for (int x = 0; x < 2; x++) {
107 // ノードの追加 87 // ノードの追加
108 editor1 = tree.getTreeEditor(); 88 CreateChildren(tree, root.add(0), x);
109 either = editor1.addNewChildAt(root, x);// 新しく入れるところへのパス
110 if (either.isA()) {// ちゃんとパスを指定できたかチェック
111 Assert.fail();
112 }
113 editor1 = either.b();// 成功した場合パスを入れる
114 // NodePath childPath = root.add(x);
115 either = editor1.success();
116 if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる
117 Assert.fail();
118 }
119 // ここまでノードの追加
120 NodePath childPath = root.add(x);
121 JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成
122 either = editor.putAttribute(childPath, key,
123 ByteBuffer.wrap("Blazblue".getBytes()));
124 if (either.isA()) {
125 Assert.fail();
126 }
127 editor = either.b();
128 either = editor.success();
129 for (int y = 0; y < 2; y++) { 89 for (int y = 0; y < 2; y++) {
130 editor1 = tree.getTreeEditor(); 90 CreateChildren(tree, root.add(0).add(x), y);
131 either = editor1.addNewChildAt(root.add(x), y);// 新しく入れるところへのパス
132 if (either.isA()) {// ちゃんとパスを指定できたかチェック
133 Assert.fail();
134 }
135 editor1 = either.b();// 成功した場合パスを入れる
136 // childPath = root.add(y);
137 either = editor1.success();
138 if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる
139 Assert.fail();
140 }
141 childPath = root.add(x).add(y);
142 editor = tree.getTreeEditor();// Treeのeditorを作成
143 either = editor.putAttribute(childPath, key,
144 ByteBuffer.wrap("Blazblues".getBytes()));
145 if (either.isA()) {
146 Assert.fail();
147 }
148 editor = either.b();
149 either = editor.success();
150 } 91 }
151 } 92 }
152 93
153 } 94 }
95
96 public static void CreateChildren(JungleTree tree, NodePath root, int num) {
97 JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成
98 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root,
99 num); // 新しく入れるところへのパス
100 if (either.isA()) {// ちゃんとパスを指定できたかチェック
101 Assert.fail();
102 }
103 editor = either.b();// 成功した場合パスを入れる
104 // NodePath childPath = root.add(x);
105 either = editor.success();
106 if (either.isA()) {// SUCCESSがちゃんと成功したかを調べる
107 Assert.fail();
108 }
109 // ここまでノードの追加
110 NodePath childPath = root.add(num);
111 editor = tree.getTreeEditor();// Treeのeditorを作成
112 either = editor.putAttribute(childPath, key,
113 ByteBuffer.wrap("Blazblue".getBytes()));
114 if (either.isA()) {
115 Assert.fail();
116 }
117 editor = either.b();
118 either = editor.success();
119 }
154 } 120 }