annotate src/treecms/memory/OnMemoryMonotonicTreeNode.java @ 25:c1e7ec6b3d44

commit
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Tue, 12 Jul 2011 14:39:35 +0900
parents 68021f7091e1
children 9cb971a68cc5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
1 package treecms.memory;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
2
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
3 import java.nio.ByteBuffer;
22
shoshi
parents: 21
diff changeset
4 import java.util.ArrayList;
shoshi
parents: 21
diff changeset
5 import java.util.Collections;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
6 import java.util.Iterator;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
7 import java.util.List;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
8 import java.util.Map;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
9 import java.util.Set;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
10 import treecms.api.MonotonicTreeNode;
21
shoshi
parents: 20
diff changeset
11 import treecms.api.Node;
15
misaka
parents: 14
diff changeset
12 import treecms.api.NodeAttributes;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
13 import treecms.api.NodeID;
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
14 import treecms.tree.util.LockableNodeTable;
16
shoshi
parents: 15
diff changeset
15 import treecms.tree.util.NodeData;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
16
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
17 public class OnMemoryMonotonicTreeNode implements MonotonicTreeNode
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
18 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
19 private volatile OnMemoryMonotonicTreeNode m_parent;
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
20 private OnMemoryNode m_node;
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
21 private final LockableNodeTable m_table;
23
shoshi
parents: 22
diff changeset
22
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
23 public OnMemoryMonotonicTreeNode(OnMemoryNode _node,OnMemoryMonotonicTreeNode _parent,LockableNodeTable _table)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
24 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
25 m_node = _node;
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
26 m_table = _table;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
27 m_parent = _parent;
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
28 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
29
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
30 @Override
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
31 public NodeID getID()
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
32 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
33 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
34 return n.getID();
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
35 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
36
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
37 @Override
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
38 public MonotonicTreeNode getParent()
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
39 {
23
shoshi
parents: 22
diff changeset
40 if(m_parent == null){
shoshi
parents: 22
diff changeset
41 return null;
shoshi
parents: 22
diff changeset
42 }
shoshi
parents: 22
diff changeset
43
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
44 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
45
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
46 //check , does parent contain the node.
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
47 if(!m_parent.contains(node.getID())){
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
48 m_parent = null;
22
shoshi
parents: 21
diff changeset
49 }
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
50
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
51 return m_parent;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
52 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
53
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
54 @Override
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
55 public ByteBuffer get(ByteBuffer _key)
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
56 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
57 OnMemoryNode node = (OnMemoryNode)getNode();
23
shoshi
parents: 22
diff changeset
58 return node.get(_key);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
59 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
60
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
61 @Override
15
misaka
parents: 14
diff changeset
62 public NodeAttributes getAll()
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
63 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
64 OnMemoryNode node = (OnMemoryNode)getNode();
23
shoshi
parents: 22
diff changeset
65 return node.getAll();
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
66 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
67
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
68 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
69 public void put(ByteBuffer _key, ByteBuffer _value)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
70 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
71 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
72 NodeData<Node> d = new NodeData<Node>(n,n);
17
shoshi
parents: 16
diff changeset
73 d.put(_key,_value);
shoshi
parents: 16
diff changeset
74
shoshi
parents: 16
diff changeset
75 cloneAndTransmit(d);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
76 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
77
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
78 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
79 public void putAll(NodeAttributes _map)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
80 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
81 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
82 NodeData<Node> d = new NodeData<Node>(n,n);
17
shoshi
parents: 16
diff changeset
83 d.putAll(_map);
shoshi
parents: 16
diff changeset
84
shoshi
parents: 16
diff changeset
85 cloneAndTransmit(d);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
86 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
87
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
88 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
89 public void remove(ByteBuffer _key)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
90 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
91 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
92 NodeData<Node> d = new NodeData<Node>(n,n);
17
shoshi
parents: 16
diff changeset
93 d.remove(_key);
shoshi
parents: 16
diff changeset
94
shoshi
parents: 16
diff changeset
95 cloneAndTransmit(d);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
96 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
97
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
98 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
99 public void removeAll(Set<ByteBuffer> _keys)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
100 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
101 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
102 NodeData<Node> d = new NodeData<Node>(n,n);
16
shoshi
parents: 15
diff changeset
103 d.removeAll(_keys);
shoshi
parents: 15
diff changeset
104
shoshi
parents: 15
diff changeset
105 cloneAndTransmit(d);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
106 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
107
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
108 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
109 public void clearAttributes()
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
110 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
111 OnMemoryNode n = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
112 NodeData<Node> d = new NodeData<Node>(n,n);
16
shoshi
parents: 15
diff changeset
113 d.clearAttributes();
shoshi
parents: 15
diff changeset
114
shoshi
parents: 15
diff changeset
115 cloneAndTransmit(d);
shoshi
parents: 15
diff changeset
116 }
shoshi
parents: 15
diff changeset
117
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
118 public void cloneAndTransmit(NodeData<Node> _d)
16
shoshi
parents: 15
diff changeset
119 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
120 String fid = m_node.getID().getFamilyID();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
121
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
122 m_table.lock(fid);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
123
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
124 OnMemoryNode node = (OnMemoryNode)m_table.tip(fid);
23
shoshi
parents: 22
diff changeset
125 NodeID newID = node.getID().update();
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
126 OnMemoryNode clone = new OnMemoryNode(newID,_d);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
127 m_table.register(clone);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
128
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
129 m_table.unlock(fid);
23
shoshi
parents: 22
diff changeset
130
shoshi
parents: 22
diff changeset
131 OnMemoryMonotonicTreeNode parent = (OnMemoryMonotonicTreeNode)getParent();
shoshi
parents: 22
diff changeset
132 if(parent != null){
shoshi
parents: 22
diff changeset
133 parent.transmit(node,clone);
shoshi
parents: 22
diff changeset
134 }
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
135
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
136 m_node = clone;
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
137 }
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
138
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
139 public boolean transmit(Node _orig,Node _edit)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
140 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
141 String fid = m_node.getID().getFamilyID();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
142 m_table.lock(fid);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
143 OnMemoryNode node = (OnMemoryNode)getNode();
14
8bf59f161b23 separete Node methods to NodeContext , NodeAttribute , NodeChildren
misaka
parents: 13
diff changeset
144
22
shoshi
parents: 21
diff changeset
145 NodeData<Node> d = new NodeData<Node>(node,node);
shoshi
parents: 21
diff changeset
146 d.replace(_edit);
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
147 NodeID newID = node.getID().update();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
148 OnMemoryNode clone = new OnMemoryNode(newID,d);
22
shoshi
parents: 21
diff changeset
149
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
150 m_table.register(clone);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
151 m_table.unlock(fid);
22
shoshi
parents: 21
diff changeset
152
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
153 m_node = clone;
22
shoshi
parents: 21
diff changeset
154
shoshi
parents: 21
diff changeset
155 OnMemoryMonotonicTreeNode parent = (OnMemoryMonotonicTreeNode)getParent();
shoshi
parents: 21
diff changeset
156 if(parent != null){
shoshi
parents: 21
diff changeset
157 return m_parent.transmit(node,clone);
20
shoshi
parents: 17
diff changeset
158 }
22
shoshi
parents: 21
diff changeset
159 return true;
20
shoshi
parents: 17
diff changeset
160 }
shoshi
parents: 17
diff changeset
161
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
162 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
163 public Node getNode()
21
shoshi
parents: 20
diff changeset
164 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
165 return m_node;
21
shoshi
parents: 20
diff changeset
166 }
shoshi
parents: 20
diff changeset
167
shoshi
parents: 20
diff changeset
168 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
169 public List<MonotonicTreeNode> getList()
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
170 {
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
171 //NodeのリストよりMonotonicTreeNodeのリストを作成する.
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
172 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
173 int size = node.getList().size();
shoshi
parents: 21
diff changeset
174 ArrayList<MonotonicTreeNode> list = new ArrayList<MonotonicTreeNode>(size);
shoshi
parents: 21
diff changeset
175 for(Iterator<Node> it = node.getList().iterator();it.hasNext();){
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
176 OnMemoryNode n = (OnMemoryNode)it.next();
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
177 OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(n,this,m_table);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
178 list.add(tn);
17
shoshi
parents: 16
diff changeset
179 }
shoshi
parents: 16
diff changeset
180
23
shoshi
parents: 22
diff changeset
181 return Collections.unmodifiableList(list);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
182 }
22
shoshi
parents: 21
diff changeset
183
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
184 @Override
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
185 public MonotonicTreeNode remove(int _index)
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
186 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
187 OnMemoryNode n = (OnMemoryNode)getNode();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
188 NodeData<Node> d = new NodeData<Node>(n,n);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
189 OnMemoryNode deleted = (OnMemoryNode)d.remove(_index);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
190
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
191 if(deleted != null){
17
shoshi
parents: 16
diff changeset
192 cloneAndTransmit(d);
22
shoshi
parents: 21
diff changeset
193
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
194 OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(deleted,null,m_table);
22
shoshi
parents: 21
diff changeset
195 return tn;
17
shoshi
parents: 16
diff changeset
196 }
shoshi
parents: 16
diff changeset
197
shoshi
parents: 16
diff changeset
198 return null;
15
misaka
parents: 14
diff changeset
199 }
22
shoshi
parents: 21
diff changeset
200
15
misaka
parents: 14
diff changeset
201 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
202 public void clearChildren()
15
misaka
parents: 14
diff changeset
203 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
204 OnMemoryNode node = (OnMemoryNode)getNode();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
205 if(node.getList().size() == 0){
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
206 return;
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
207 }
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
208
22
shoshi
parents: 21
diff changeset
209 NodeData<Node> d = new NodeData<Node>(node,node);
20
shoshi
parents: 17
diff changeset
210 d.clearChildren();
17
shoshi
parents: 16
diff changeset
211
shoshi
parents: 16
diff changeset
212 cloneAndTransmit(d);
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
213 }
16
shoshi
parents: 15
diff changeset
214
shoshi
parents: 15
diff changeset
215 @Override
shoshi
parents: 15
diff changeset
216 public Map<ByteBuffer, ByteBuffer> asMap()
shoshi
parents: 15
diff changeset
217 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
218 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
219 return node.asMap();
16
shoshi
parents: 15
diff changeset
220 }
shoshi
parents: 15
diff changeset
221
shoshi
parents: 15
diff changeset
222 @Override
shoshi
parents: 15
diff changeset
223 public Set<ByteBuffer> getKeySet()
shoshi
parents: 15
diff changeset
224 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
225 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
226 return node.getKeySet();
16
shoshi
parents: 15
diff changeset
227 }
shoshi
parents: 15
diff changeset
228
shoshi
parents: 15
diff changeset
229 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
230 public MonotonicTreeNode get(int _index)
16
shoshi
parents: 15
diff changeset
231 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
232 OnMemoryNode node = (OnMemoryNode)getNode();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
233 OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(node,this,m_table);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
234 return tn;
16
shoshi
parents: 15
diff changeset
235 }
shoshi
parents: 15
diff changeset
236
shoshi
parents: 15
diff changeset
237 @Override
20
shoshi
parents: 17
diff changeset
238 public boolean contains(NodeID _id)
16
shoshi
parents: 15
diff changeset
239 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
240 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
241 return node.contains(_id);
16
shoshi
parents: 15
diff changeset
242 }
shoshi
parents: 15
diff changeset
243
shoshi
parents: 15
diff changeset
244 @Override
20
shoshi
parents: 17
diff changeset
245 public boolean swap(String _fid1,String _fid2)
shoshi
parents: 17
diff changeset
246 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
247 OnMemoryNode node = (OnMemoryNode)getNode();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
248 NodeData<Node> d = new NodeData<Node>(node,node);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
249
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
250 if(d.swap(_fid1,_fid2)){
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
251 cloneAndTransmit(d);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
252
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
253 return true;
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
254 }
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
255
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
256 return false;
20
shoshi
parents: 17
diff changeset
257 }
shoshi
parents: 17
diff changeset
258
shoshi
parents: 17
diff changeset
259 @Override
shoshi
parents: 17
diff changeset
260 public Set<String> getFamilyIDSet()
shoshi
parents: 17
diff changeset
261 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
262 Set<String> fids = m_node.getFamilyIDSet();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
263 return fids;
20
shoshi
parents: 17
diff changeset
264 }
shoshi
parents: 17
diff changeset
265
shoshi
parents: 17
diff changeset
266 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
267 public MonotonicTreeNode get(String _fid)
16
shoshi
parents: 15
diff changeset
268 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
269 OnMemoryNode node = (OnMemoryNode)m_node.get(_fid);
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
270 OnMemoryMonotonicTreeNode mono = new OnMemoryMonotonicTreeNode(node,this,m_table);
20
shoshi
parents: 17
diff changeset
271 return mono;
shoshi
parents: 17
diff changeset
272 }
shoshi
parents: 17
diff changeset
273
shoshi
parents: 17
diff changeset
274 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
275 public MonotonicTreeNode remove(String _fid)
20
shoshi
parents: 17
diff changeset
276 {
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
277 OnMemoryNode node = (OnMemoryNode)getNode();
22
shoshi
parents: 21
diff changeset
278
shoshi
parents: 21
diff changeset
279 NodeData<Node> d = new NodeData<Node>(node,node);
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
280 OnMemoryNode deleted = (OnMemoryNode)d.remove(_fid);
20
shoshi
parents: 17
diff changeset
281
shoshi
parents: 17
diff changeset
282 cloneAndTransmit(d);
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
283 return new OnMemoryMonotonicTreeNode(deleted,null,m_table);
22
shoshi
parents: 21
diff changeset
284 }
shoshi
parents: 21
diff changeset
285
shoshi
parents: 21
diff changeset
286 @Override
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
287 public MonotonicTreeNode create(NodeAttributes _attr)
22
shoshi
parents: 21
diff changeset
288 {
shoshi
parents: 21
diff changeset
289 NodeID newID = getNode().getID().create();
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
290 OnMemoryNode newNode = new OnMemoryNode(newID,new NodeData<Node>(null,_attr));
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
291 m_table.register(newNode);
20
shoshi
parents: 17
diff changeset
292
22
shoshi
parents: 21
diff changeset
293 OnMemoryNode thisNode = (OnMemoryNode)getNode();
shoshi
parents: 21
diff changeset
294 NodeData<Node> d = new NodeData<Node>(thisNode,thisNode);
shoshi
parents: 21
diff changeset
295 d.add(newNode);
23
shoshi
parents: 22
diff changeset
296 cloneAndTransmit(d);
shoshi
parents: 22
diff changeset
297
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
298 OnMemoryMonotonicTreeNode tn = new OnMemoryMonotonicTreeNode(newNode,this,m_table);
23
shoshi
parents: 22
diff changeset
299 return tn;
16
shoshi
parents: 15
diff changeset
300 }
25
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
301
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
302 @Override
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
303 public String toString()
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
304 {
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
305 return m_node.toString();
Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
306 }
12
fbbb7e414346 modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
shoshi
parents:
diff changeset
307 }