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();
	}
}