Mercurial > hg > Members > tatsuki > bench > jungle-core
comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java @ 71:5dbae471a3b3
Deleting DefaultNode(change to DefaultTreeNodeChildren)
(on error)
author | one |
---|---|
date | Tue, 26 Aug 2014 07:32:15 +0900 |
parents | b136a24f82aa |
children | 3a3622cf2eef |
comparison
equal
deleted
inserted
replaced
70:053c9b52a5b2 | 71:5dbae471a3b3 |
---|---|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; |
2 | 2 |
3 import java.nio.ByteBuffer; | 3 import java.nio.ByteBuffer; |
4 import java.util.Iterator; | 4 import java.util.Iterator; |
5 | |
5 import fj.P2; | 6 import fj.P2; |
6 import fj.data.List; | 7 import fj.data.List; |
7 import fj.data.TreeMap; | 8 import fj.data.TreeMap; |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes; | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren; |
24 System.out.println(split._1().length()); | 25 System.out.println(split._1().length()); |
25 System.out.println(split._2().length()); | 26 System.out.println(split._2().length()); |
26 | 27 |
27 } | 28 } |
28 | 29 |
29 private final DefaultNode node; | 30 public List<DefaultTreeNode> children; |
31 public TreeMap<String,ByteBuffer> attrs; | |
30 | 32 |
31 public DefaultTreeNodeChildren(DefaultNode _node) | 33 public DefaultTreeNodeChildren(List<DefaultTreeNode> _children,TreeMap<String,ByteBuffer> _attrs) |
32 { | 34 { |
33 node = _node; | 35 children = _children; |
36 attrs = _attrs; | |
34 } | 37 } |
35 | 38 |
36 private boolean boundaryCheck(int _pos) | 39 private boolean boundaryCheck(int _pos) |
37 { | 40 { |
38 int size = node.getChildren().size(); | 41 int size = children.length(); |
39 if(size < _pos){ | 42 if(size < _pos){ |
40 return false; | 43 return false; |
41 } | 44 } |
42 | 45 |
43 return true; | 46 return true; |
48 { | 51 { |
49 if(!boundaryCheck(_pos) || _pos < 0){ | 52 if(!boundaryCheck(_pos) || _pos < 0){ |
50 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | 53 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
51 } | 54 } |
52 | 55 |
53 DefaultChildren children = node.getChildren(); | |
54 DefaultAttributes attrs = node.getAttributes(); | |
55 | 56 |
56 List<DefaultNode> raw = children.getChildrenAsRawList(); | |
57 | 57 |
58 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); | 58 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); |
59 List<DefaultNode> newChildren = split._1().snoc(new DefaultNode()).append(split._2()); | 59 List<DefaultTreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2()); |
60 DefaultNode newNode = new DefaultNode(newChildren,attrs.getAttributesAsRawMap()); | 60 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); |
61 | 61 |
62 return DefaultEither.newB(new DefaultTreeNode(newNode)); | 62 return DefaultEither.newB(newNode); |
63 } | 63 } |
64 | 64 |
65 @Override | 65 @Override |
66 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos) | 66 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos) |
67 { | 67 { |
68 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){ | 68 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){ |
69 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | 69 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
70 } | 70 } |
71 | |
72 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); | |
73 List<DefaultTreeNode> newChildren = split._1().append(split._2().tail()); | |
71 | 74 |
72 DefaultChildren chs = node.getChildren(); | |
73 List<DefaultNode> raw = chs.getChildrenAsRawList(); | |
74 | 75 |
75 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); | 76 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); |
76 List<DefaultNode> newChildren = split._1().append(split._2().tail()); | |
77 | 77 |
78 DefaultAttributes attrs = node.getAttributes(); | 78 return DefaultEither.newB(newNode); |
79 TreeMap<String, ByteBuffer> map = attrs.getAttributesAsRawMap(); | |
80 | |
81 DefaultNode newNode = new DefaultNode(newChildren,map); | |
82 | |
83 return DefaultEither.newB(new DefaultTreeNode(newNode)); | |
84 } | 79 } |
85 | 80 |
86 @Override | 81 @Override |
87 public int size() | 82 public int size() |
88 { | 83 { |
89 return node.getChildren().size(); | 84 return children.length(); |
90 } | 85 } |
91 | 86 |
92 @Override | 87 @Override |
93 public Iterator<DefaultTreeNode> iterator() | 88 public Iterator<DefaultTreeNode> iterator() |
94 { | 89 { |
95 IterableConverter.Converter<DefaultTreeNode,DefaultNode> converter = new IterableConverter.Converter<DefaultTreeNode,DefaultNode>(){ | 90 return children.iterator(); |
96 @Override | |
97 public DefaultTreeNode conv(DefaultNode _b) | |
98 { | |
99 return new DefaultTreeNode(_b); | |
100 } | |
101 }; | |
102 | |
103 List<DefaultNode> raw = node.getChildren().getChildrenAsRawList(); | |
104 return new IterableConverter<DefaultTreeNode,DefaultNode>(raw,converter).iterator(); | |
105 } | 91 } |
106 | 92 |
107 @Override | 93 @Override |
108 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement) | 94 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement) |
109 { | 95 { |
110 int size = node.getChildren().size(); | 96 int size = children.length(); |
111 if(!(0 <= _pos && _pos < size)){ | 97 if(!(0 <= _pos && _pos < size)){ |
112 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | 98 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
113 } | 99 } |
114 DefaultNode replacement = _replacement.getWrap(); | 100 DefaultTreeNode replacement = _replacement; |
115 | 101 |
116 List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList(); | 102 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos + 1); |
117 P2<List<DefaultNode>,List<DefaultNode>> split = rawList.splitAt(_pos + 1); | 103 List<DefaultTreeNode> init = split._1().reverse().tail().reverse(); |
118 List<DefaultNode> init = split._1().reverse().tail().reverse(); | 104 List<DefaultTreeNode> newInit = init.snoc(replacement); |
119 List<DefaultNode> newInit = init.snoc(replacement); | 105 List<DefaultTreeNode> newList = newInit.append(split._2()); |
120 List<DefaultNode> newList = newInit.append(split._2()); | |
121 TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap(); | |
122 | 106 |
123 return DefaultEither.newB(new DefaultTreeNode(new DefaultNode(newList,rawMap))); | 107 return DefaultEither.newB(new DefaultTreeNode(newList,attrs)); |
124 } | 108 } |
125 | 109 |
126 @Override | 110 @Override |
127 public Either<Error,DefaultTreeNode> at(int _pos) | 111 public Either<Error,DefaultTreeNode> at(int _pos) |
128 { | 112 { |
129 List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList(); | 113 DefaultTreeNode Node = children.index(_pos); |
130 DefaultNode ch = rawList.index(_pos); | 114 if(Node == null){ |
131 if(ch == null){ | |
132 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | 115 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
133 } | 116 } |
134 | 117 |
135 return DefaultEither.newB(new DefaultTreeNode(ch)); | 118 return DefaultEither.newB(Node); |
136 } | 119 } |
137 | 120 |
138 @Override | 121 @Override |
139 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild) | 122 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild) |
140 { | 123 { |
141 if(!boundaryCheck(_pos) || _pos < 0){ | 124 if(!boundaryCheck(_pos) || _pos < 0){ |
142 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); | 125 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); |
143 } | 126 } |
144 DefaultNode newChild = _newChild.getWrap(); | |
145 | 127 |
146 List<DefaultNode> raw = node.getChildren().getChildrenAsRawList(); | |
147 TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap(); | |
148 | 128 |
149 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); | 129 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos); |
150 List<DefaultNode> newChildren = split._1().snoc(newChild).append(split._2()); | 130 List<DefaultTreeNode> newChildren = split._1().snoc(_newChild).append(split._2()); |
151 DefaultNode newNode = new DefaultNode(newChildren,rawMap); | 131 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs); |
152 | 132 |
153 return DefaultEither.newB(new DefaultTreeNode(newNode)); | 133 return DefaultEither.newB(newNode); |
154 } | 134 } |
155 } | 135 } |