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

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

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


import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;

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

public class DefaultNodePath implements NodePath {
    private final List<Integer> path;

    public static void main(String args[]) {
        DefaultNodePath p = new DefaultNodePath();
        p = p.add(1).add(2).add(3).add(4);
        System.out.println(p.toString());
    }

    public DefaultNodePath() {
        path = new List<Integer>().addLast(-1);
    }

    public DefaultNodePath(int num) {
        path = new List<Integer>().addLast(num);
    }

    public DefaultNodePath(String nodePath) {
        List<Integer> _path = new List<>();
        String[] nums = nodePath.split(",");
        for (String num : nums) {
            if (num.equals("-1"))
                _path = _path.addLast(-1);
            else
                _path = _path.addLast(Integer.parseInt(num));
        }
        this.path = _path;
    }

    private DefaultNodePath(List<Integer> path) {
        this.path = path;
    }

    @Override
    public Iterator<Integer> iterator() {
        return path.iterator();
    }

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

    @Override
    public DefaultNodePath add(int pos) {
        List<Integer> newPath = path.addLast(pos);
        return new DefaultNodePath(newPath);
    }

    @Override
    public NodePath addHead(int pos) {
        List<Integer> newPath = path.add(0, pos);
        return new DefaultNodePath(newPath);
    }

    @Override
    public Pair<Integer, NodePath> pop() {
        Integer head = path.head();
        List<Integer> tail = path.deleteHead();
        return new Pair<>(head, new DefaultNodePath(tail));
    }

    @Override
    public Pair<Integer, NodePath> last() {
        Integer last = path.tail();
        List<Integer> list = path.deleteLast();
        return new Pair<>(last, new DefaultNodePath(list));
    }

    @Override
    public String toString() {
        return path.toString();
    }

    @Override
    public int size() {
        return path.length();
    }


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

    public List<DefaultNodePath> inits() {
        List<DefaultNodePath> paths = new List<>();
        List<Integer> coursePath = new List<>();
        for (Integer tmpPath : path) {
            List<Integer> tmp = coursePath.addLast(tmpPath);
            paths = paths.addLast(new DefaultNodePath(tmp));
            coursePath = tmp;
        }
        return paths;
    }

    //以下使わない
    @Override
    public String getKey() {
        return null;
    }

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

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

}