Mercurial > hg > Members > tatsuki > bench > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/ChildrenImpl.java @ 10:a2c019a77c27
commit
author | Shoshi TAMAKI |
---|---|
date | Mon, 10 Dec 2012 18:50:53 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/ChildrenImpl.java Mon Dec 10 18:50:53 2012 +0900 @@ -0,0 +1,63 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl; + +import java.util.Iterator; + +import fj.P2; +import fj.data.List; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; + +public class ChildrenImpl implements Children +{ + private final List<Node> children; + private static final List<Node> EMPTY = List.nil(); + + public ChildrenImpl() + { + this(EMPTY); + } + + public ChildrenImpl(List<Node> _children) + { + children = _children; + } + + public ChildrenImpl add(Node _newNode) + { + return new ChildrenImpl(children.snoc(_newNode)); + } + + public ChildrenImpl insert(Node _newNode,int _pos) + { + check(_pos); + + P2<List<Node>,List<Node>> split = children.splitAt(_pos); + List<Node> newChildren = split._1().snoc(_newNode).append(split._2()); + + return new ChildrenImpl(newChildren); + } + + public ChildrenImpl delete(int _pos) + { + check(_pos); + + P2<List<Node>,List<Node>> split = children.splitAt(_pos); + List<Node> newChildren = split._1().init().append(split._2()); + + return new ChildrenImpl(newChildren); + } + + public void check(int _pos) + { + if(children.length() < _pos){ + throw new IllegalArgumentException("_pos > length"); + } + } + + @Override + public Iterator<Node> iterator() + { + return null; + } +}