Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/benchMark/JungleTreeCreater.java @ 320:e3e4ffd746cb
commit
author | tatsuki |
---|---|
date | Tue, 07 Feb 2017 21:34:21 +0900 |
parents | 1a5f3d3f3437 |
children | 2a0cb1f0ba4e |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.benchMark; import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import junit.framework.Assert; import java.nio.ByteBuffer; public class JungleTreeCreater { private int maxDeps; private int maxNodeCount; private int distanceCreateIndex; private int editCount = 0; private int nodeCount = 1;//今作ったノードのカウント、rootがあるから最初は1 public JungleTreeCreater(int maxNodeCount, int distanceCreateIndex) { this.maxNodeCount = maxNodeCount; this.distanceCreateIndex = distanceCreateIndex; this.maxDeps = getMaxDeps(maxNodeCount); } public JungleTreeEditor createTree(JungleTreeEditor editor, String key, String indexKey, NodePath path) { int deps = 1; JungleTreeEditor newEditor = createTree(editor, key, indexKey, deps, path); Either<Error, JungleTreeEditor> either = newEditor.success(); if (either.isA()) Assert.fail(); return either.b(); } private JungleTreeEditor createTree(JungleTreeEditor editor, String key, String indexKey, int deps, NodePath path) { Either<Error, JungleTreeEditor> either; for (int i = 0; i < 2; i++) { if (nodeCount == maxNodeCount || maxDeps == deps) { return editor; } String value = String.valueOf(nodeCount); either = editor.addNewChildAndPutAttribute(path, i, key, ByteBuffer.wrap(value.getBytes())); if (either.isA()) Assert.fail(); editor = either.b(); editCount++; if (distanceCreateIndex == editCount) { either = editor.success(); if (either.isA()) Assert.fail(); editor = either.b(); editCount = 0; } nodeCount++; } for (int i = 0; i < 2; i++) { editor = createTree(editor, key, indexKey, deps + 1, path.add(i)); } return editor; } private int getMaxDeps(int maxNodeCount) { int i = 1; int count = 1; //深さを決めるために使う。 int currentNodeCount = 1; for (; count < maxNodeCount; i++) { count = count + (currentNodeCount * 2); currentNodeCount = currentNodeCount * 2; } return i; } public int getDeps() { return maxDeps; } }