Mercurial > hg > Members > tatsuki > jungle-bench
view 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 |
line wrap: on
line source
package example; 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.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; 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; import junit.framework.Assert; public class SimpleJungleRead extends Thread { public static final String key = "name"; public static final String valueString = "kanagawsa"; public static final ByteBuffer value = ByteBuffer.wrap(valueString .getBytes()); public static void main(String[] args) { System.out.println("タスク数" + args[0]); System.out.println("CPU数" + args[1]); int roopCount = Integer.parseInt(args[0]); int threadCount = Integer.parseInt(args[1]); ReadThread[] wt = new ReadThread[threadCount]; Jungle j = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor( new DefaultTraverser())); j.createNewTree("tree");// 木を作った JungleTree tree = j.getTreeByName("tree");// 名前を取得 // JungleTreeEditor editor1 = tree.getTreeEditor();// editorの取得 // NodePath root = new DefaultNodePath();// パスの取得 // ------子ノードの追加 List<DefaultNodePath> paths = generatePathPattern( new DefaultNodePath(), 0, 3); CreateTree(tree); // ここまでノードの追加 // ここで処理を行う for (int count = 0; count < threadCount; count++) { wt[count] = new ReadThread(j, (roopCount / threadCount), paths); } long t1 = System.currentTimeMillis();// 時間の測定開始 for (int count = 0; count < threadCount; count++) { wt[count].start(); } for (int count = 0; count < threadCount; count++) { try { wt[count].join(); } catch (InterruptedException e) { } } long t2 = System.currentTimeMillis(); System.out.println(t2 - t1 + "s"); } 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); } return paths; } public static void CreateTree(JungleTree tree) { NodePath root = new DefaultNodePath(); CreateChildren(tree, root, 0); for (int x = 0; x < 2; x++) { // ノードの追加 CreateChildren(tree, root.add(0), x); for (int y = 0; y < 2; y++) { 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(); } }