view src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/operations/NetworkNodePath.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.jungleNetwork.operations;


import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.PathType;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Pair;
import org.msgpack.annotation.Message;

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

@Message
public class NetworkNodePath implements NodePath {
    LinkedList<Integer> path;

    public NetworkNodePath() {
        path = new LinkedList<Integer>();
        path.add(-1);
    }

    public NetworkNodePath(NodePath _p) {
        path = new LinkedList<Integer>();
        for (Integer pos : _p) {
            path.add(pos);
        }
    }

    private NetworkNodePath(LinkedList<Integer> _path) {
        path = _path;
    }

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

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

    @Override
    public NetworkNodePath add(int _pos) {
        LinkedList<Integer> newPath = copyPath();
        newPath.add(_pos);
        return new NetworkNodePath(newPath);
    }

    @Override
    public NodePath addHead(int pos) {
        return null; //Linked Listを後で直す
        //   List<Integer> newPath = path.add(0, pos);
        //   return new DefaultNodePath(newPath);
    }

    @Override
    public Pair<Integer, NodePath> pop() {
        LinkedList<Integer> cPath = copyPath();
        int e = cPath.getFirst();
        cPath.remove();
        return new Pair<Integer, NodePath>(e, new NetworkNodePath(cPath));
    }

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

    private LinkedList<Integer> copyPath() {
        LinkedList<Integer> newPath = new LinkedList<Integer>();
        for (Integer i : path) {
            newPath.add(i);
        }
        return newPath;
    }

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

    @Override
    public NodePath tail() {
        path.removeLast();
        return new NetworkNodePath(path);
    }

    @Override
    public Pair<Integer, NodePath> last() {
        Integer num = path.removeLast();
        return new Pair<Integer, NodePath>(num, new NetworkNodePath(path));
    }

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

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

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