Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java @ 78:540a27dde42f
Delete EnableNode and EnableNodeWrapper
but not repair test program
author | one |
---|---|
date | Sun, 31 Aug 2014 00:44:35 +0900 |
parents | 26dfa90016d1 |
children | 715a9fbf02fc |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; import java.nio.ByteBuffer; import java.util.Iterator; import fj.P2; import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; public class DefaultTreeNodeChildren implements TreeNodeChildren<DefaultTreeNode> { public static void main(String _args[]) { List<Integer> list = List.range(0,5); P2<List<Integer>, List<Integer>> split = list.splitAt(0); System.out.println(split._1().length()); System.out.println(split._2().length()); } public List<DefaultTreeNode> children; public TreeMap<String,ByteBuffer> attrs; public DefaultTreeNodeChildren(List<DefaultTreeNode> _children,TreeMap<String,ByteBuffer> _attrs) { children = _children; attrs = _attrs; } private boolean boundaryCheck(int _pos) { int size = children.length(); if(size < _pos){ return false; } return true; } @Override public List<DefaultTreeNode> getChildrenAsRawList(){ return children; } @Override public Either<Error,DefaultTreeNode> addNewChildAt(int _pos) { if(!boundaryCheck(_pos) || _pos < 0){ return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); List<DefaultTreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2()); DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); return DefaultEither.newB(newNode); } @Override public Either<Error,DefaultTreeNode> deleteChildAt(int _pos) { if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){ return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); List<DefaultTreeNode> newChildren = split._1().append(split._2().tail()); DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); return DefaultEither.newB(newNode); } @Override public int size() { return children.length(); } @Override public Iterator<DefaultTreeNode> iterator() { return children.iterator(); } @Override public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement) { int size = children.length(); if(!(0 <= _pos && _pos < size)){ return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } DefaultTreeNode replacement = _replacement; P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos + 1); List<DefaultTreeNode> init = split._1().reverse().tail().reverse(); List<DefaultTreeNode> newInit = init.snoc(replacement); List<DefaultTreeNode> newList = newInit.append(split._2()); return DefaultEither.newB(new DefaultTreeNode(newList,attrs)); } @Override public Either<Error,DefaultTreeNode> at(int _pos) { DefaultTreeNode Node = children.index(_pos); if(Node == null){ return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } return DefaultEither.newB(Node); } @Override public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild) { if(!boundaryCheck(_pos) || _pos < 0){ return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); List<DefaultTreeNode> newChildren = split._1().snoc(_newChild).append(split._2()); DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); return DefaultEither.newB(newNode); } }