Mercurial > hg > Members > tatsuki > bench > jungle-core
annotate 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 |
rev | line source |
---|---|
37 | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; |
2 | |
3 import java.nio.ByteBuffer; | |
4 import java.util.Iterator; | |
71 | 5 |
37 | 6 import fj.P2; |
7 import fj.data.List; | |
8 import fj.data.TreeMap; | |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes; | |
52 | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren; |
37 | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; | |
16 | |
52 | 17 public class DefaultTreeNodeChildren implements TreeNodeChildren<DefaultTreeNode> |
37 | 18 { |
39 | 19 public static void main(String _args[]) |
20 { | |
21 List<Integer> list = List.range(0,5); | |
41 | 22 P2<List<Integer>, List<Integer>> split = list.splitAt(0); |
39 | 23 System.out.println(split._1().length()); |
24 System.out.println(split._2().length()); | |
25 | |
26 } | |
27 | |
71 | 28 public List<DefaultTreeNode> children; |
29 public TreeMap<String,ByteBuffer> attrs; | |
37 | 30 |
71 | 31 public DefaultTreeNodeChildren(List<DefaultTreeNode> _children,TreeMap<String,ByteBuffer> _attrs) |
37 | 32 { |
71 | 33 children = _children; |
34 attrs = _attrs; | |
37 | 35 } |
36 | |
37 private boolean boundaryCheck(int _pos) | |
38 { | |
71 | 39 int size = children.length(); |
39 | 40 if(size < _pos){ |
37 | 41 return false; |
42 } | |
43 | |
44 return true; | |
45 } | |
46 | |
47 @Override | |
75
26dfa90016d1
error delete but 2 test program commentout and not action BulletinBoard
one
parents:
74
diff
changeset
|
48 public List<DefaultTreeNode> getChildrenAsRawList(){ |
26dfa90016d1
error delete but 2 test program commentout and not action BulletinBoard
one
parents:
74
diff
changeset
|
49 return children; |
26dfa90016d1
error delete but 2 test program commentout and not action BulletinBoard
one
parents:
74
diff
changeset
|
50 } |
26dfa90016d1
error delete but 2 test program commentout and not action BulletinBoard
one
parents:
74
diff
changeset
|
51 @Override |
52 | 52 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos) |
37 | 53 { |
39 | 54 if(!boundaryCheck(_pos) || _pos < 0){ |
37 | 55 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
56 } | |
57 | |
58 | |
59 | |
71 | 60 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); |
61 List<DefaultTreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2()); | |
62 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); | |
37 | 63 |
71 | 64 return DefaultEither.newB(newNode); |
37 | 65 } |
66 | |
67 @Override | |
52 | 68 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos) |
37 | 69 { |
39 | 70 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){ |
37 | 71 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
72 } | |
71 | 73 |
74 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); | |
75 List<DefaultTreeNode> newChildren = split._1().append(split._2().tail()); | |
37 | 76 |
77 | |
71 | 78 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); |
37 | 79 |
71 | 80 return DefaultEither.newB(newNode); |
37 | 81 } |
82 | |
83 @Override | |
84 public int size() | |
85 { | |
71 | 86 return children.length(); |
37 | 87 } |
88 | |
89 @Override | |
52 | 90 public Iterator<DefaultTreeNode> iterator() |
37 | 91 { |
71 | 92 return children.iterator(); |
37 | 93 } |
94 | |
95 @Override | |
52 | 96 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement) |
37 | 97 { |
71 | 98 int size = children.length(); |
41 | 99 if(!(0 <= _pos && _pos < size)){ |
37 | 100 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
101 } | |
71 | 102 DefaultTreeNode replacement = _replacement; |
37 | 103 |
71 | 104 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos + 1); |
105 List<DefaultTreeNode> init = split._1().reverse().tail().reverse(); | |
106 List<DefaultTreeNode> newInit = init.snoc(replacement); | |
107 List<DefaultTreeNode> newList = newInit.append(split._2()); | |
39 | 108 |
71 | 109 return DefaultEither.newB(new DefaultTreeNode(newList,attrs)); |
37 | 110 } |
41 | 111 |
112 @Override | |
52 | 113 public Either<Error,DefaultTreeNode> at(int _pos) |
41 | 114 { |
71 | 115 DefaultTreeNode Node = children.index(_pos); |
116 if(Node == null){ | |
41 | 117 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
118 } | |
119 | |
71 | 120 return DefaultEither.newB(Node); |
41 | 121 } |
122 | |
123 @Override | |
52 | 124 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild) |
41 | 125 { |
126 if(!boundaryCheck(_pos) || _pos < 0){ | |
127 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | |
128 } | |
129 | |
130 | |
71 | 131 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); |
132 List<DefaultTreeNode> newChildren = split._1().snoc(_newChild).append(split._2()); | |
133 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); | |
41 | 134 |
71 | 135 return DefaultEither.newB(newNode); |
41 | 136 } |
37 | 137 } |