view src/test/java/jp/ac/u_ryukyu/ie/cr/jungle/CreateTreeMethod.java @ 329:2a0cb1f0ba4e

rename Error package
author kono
date Sat, 08 Jul 2017 21:05:55 +0900
parents 0767620e6f5f
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungle;

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.jungleError.Error;
import junit.framework.Assert;

import java.nio.ByteBuffer;

/**
 * Created by e115731 on 2016/12/28.
 */
public class CreateTreeMethod {

    /**
     * Jungleの木を構築する関数
     * maxHeightで指定した深さまで木を構築する
     * ノードは3つの子を持つ
     */
    public static JungleTreeEditor createTree(JungleTreeEditor editor, String key, String indexKey, int _maxHeight, NodePath path) {
        JungleTreeEditor newEditor = createTree(editor, key, indexKey, 0, _maxHeight, path);
        Either<Error,JungleTreeEditor> either = newEditor.success();
        if (either.isA())
            Assert.fail();
        return either.b();
    }

    private static JungleTreeEditor createTree(JungleTreeEditor editor, String key, String indexKey, int _curY, int _maxHeight, NodePath path) {

        if (_curY == _maxHeight) {
            return editor;
        }
        for (int i = 0; i < 3; i++) {

            Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, i);
            if (either.isA())
                Assert.fail();
            editor = either.b();
            String value = path.add(i).toString();
            either = editor.putAttribute(path.add(i), key, ByteBuffer.wrap(value.getBytes()));
            if (either.isA())
                Assert.fail();
            editor = either.b();
            either = editor.putAttribute(path.add(i), indexKey, ByteBuffer.wrap(value.getBytes()));
            if (either.isA())
                Assert.fail();
            editor = either.b();
            editor = createTree(editor, key, indexKey, _curY + 1, _maxHeight, path.add(i));
        }
        return editor;
    }
}