view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/node/Default/DefaultTreeNode.java @ 329:2a0cb1f0ba4e

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

package jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default;


import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
import jp.ac.u_ryukyu.ie.cr.jungle.data.treemap.TreeMap;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeChildren;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;

import java.nio.ByteBuffer;

public class DefaultTreeNode implements TreeNode {
    private List<TreeNode> children;
    private TreeMap<String, ByteBuffer> attrs;

    private static final List<TreeNode> NIL_LIST = new List<>();

    public DefaultTreeNode() {
        this(NIL_LIST, new TreeMap<>());
    }

    public DefaultTreeNode(List<TreeNode> _children, TreeMap<String, ByteBuffer> _attrs) {
        attrs = _attrs;
        children = _children;
    }

    @Override
    public DefaultTreeNodeChildren getChildren() {
        return new DefaultTreeNodeChildren(children, attrs);
    }

    @Override
    public DefaultTreeNodeAttribute getAttributes() {
        return new DefaultTreeNodeAttribute(children, attrs);
    }

    @Override
    public DefaultTreeNode createNewNode() {
        return new DefaultTreeNode();
    }

    public DefaultTreeNode clone() {
        return new DefaultTreeNode(children, attrs);
    }

    @Override
    public Either<Error, TreeNode> appendRootNode() {
        TreeNodeChildren newRootChildren = new DefaultTreeNodeChildren(NIL_LIST, new TreeMap<>());
        Either<Error, TreeNode> either = newRootChildren.addNewChildAt(0,this);
        return either;
    }

    @Override
    public int compareTo(TreeNode o) {
        return this.getHash() - o.getHash();
    }

    @Override
    public int getHash() {
        return this.hashCode();
    }
}