view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/nodepath/RedBlackTreeNodePath.java @ 308:201cc75a9984

change Red Black Tree Edit Path Extends
author tatsuki
date Thu, 26 Jan 2017 15:23:25 +0900
parents 67c330ef2472
children f8e75ef7ac5d
line wrap: on
line source

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


import jp.ac.u_ryukyu.ie.cr.jungle.store.NulIterator;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;

import java.nio.ByteBuffer;
import java.util.Iterator;

public class RedBlackTreeNodePath implements NodePath {

    private final String key;
    private final ByteBuffer value;
    /**
     * traverserを使うかどうかのフラグ
     * -2だった場合Traverserを使わない
     * 主にノードの追加、削除等回転処理が行われる処理の場合に使う
     * <p>
     * それ以外の値だった場合Traverserを使う
     * Attribute関係とか
     * intの理由はgetで受け取れるから
     * <p>
     * flagはaddでセットする
     * ココらへんは後でちゃんと直す
     */
    private int flags;

    public RedBlackTreeNodePath(String key, ByteBuffer value) {
        this.key = key;
        this.value = value;
    }

    private RedBlackTreeNodePath(String key, ByteBuffer value, int flags) {
        this.key = key;
        this.value = value;
        this.flags = flags;
    }

    @Override
    public String getKey() {
        return key;
    }

    @Override
    public ByteBuffer getValue() {
        return value;
    }

    @Override
    public PathType getPathType() {
        return PathType.RedBlack;
    }

    //以下使わない
    @Override
    public Iterator<Integer> iterator() {
        return new NulIterator<>();
    }

    @Override
    public int get(int index) {
        return flags;
    }

    @Override
    public NodePath add(int pos) {
        return new RedBlackTreeNodePath(key, value, pos);
    }

    @Override
    public NodePath addHead(int pos) {
        return null;
    }

    @Override
    public Pair<Integer, NodePath> pop() {
        return null;
    }

    @Override
    public Pair<Integer, NodePath> last() {
        return null;
    }

    @Override
    public String toString() {
        return key + value;
    }

    @Override
    public int size() {
        return 0;
    }


    //PATHの一番後ろを取り除いたPATHを新しく作って返す
// EXAMPLE <0,0,3> → <0,0>
    @Override
    public NodePath tail() {
        return null;
    }

}