comparison src/treecms/api/Node.java @ 12:fbbb7e414346

modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
author shoshi
date Wed, 11 May 2011 03:34:01 +0900
parents 85061e874775
children c8601b0fa8a3
comparison
equal deleted inserted replaced
11:85061e874775 12:fbbb7e414346
1 package treecms.api; 1 package treecms.api;
2 2
3 import java.util.Iterator;
3 import java.util.List; 4 import java.util.List;
4 import java.util.Map; 5 import java.util.Map;
6 import java.util.Set;
5 import java.nio.ByteBuffer; 7 import java.nio.ByteBuffer;
6 8
7 /** 9 /**
8 * 木構造の基本のデータ単位であるNodeを示します.Nodeは子供のリストとデータのマップを保持します.また,クライアントはノードが保持しているデータをNodeDataとして 10 * 木構造の基本のデータ単位であるNodeを示します.Nodeは子供のリストとデータのマップを保持します.また,クライアントはノードが保持しているデータをNodeDataとして
9 * 取得することが出来ます. 11 * 取得することが出来ます.
12 *
13 * NodeはSingleLinkで子供Nodeへのパスしか保持していません、どのNodeが親かどうか判断するのは不可能です.
14 * このようにしたのは,非破壊的木構造を実装するに当たり,編集対象のNodeの親を検索するのが困難であるからです.
15 * DoubleLinkな実装はTree/MonotonicTreeで行います.
16 *
17 * また,重複した子供を追加することは出来ません,このインターフェイスを実装するクラスはそのように実装します.
10 * @author shoshi 18 * @author shoshi
11 */ 19 */
12 public interface Node 20 public interface Node
13 { 21 {
14 /** 22 /**
17 */ 25 */
18 public NodeID getID(); 26 public NodeID getID();
19 27
20 /** 28 /**
21 * Nodeが保持するデータを取得します.クライアントはこのメソッドを用いて取得されるNodeDataを用いてNodeの内容を<b>変更できません</b>。 29 * Nodeが保持するデータを取得します.クライアントはこのメソッドを用いて取得されるNodeDataを用いてNodeの内容を<b>変更できません</b>。
30 * 変更を加えた場合は無視されるか、例外が発生します.
22 * @return Nodeが保持するNodeData 31 * @return Nodeが保持するNodeData
23 */ 32 */
24 public NodeData getData(); 33 public NodeData getData();
25 34
26 /** 35 /**
27 * Nodeが属するForestを取得します. 36 * Nodeが属するForestを取得します.
28 * @return Nodeが属するForest 37 * @return Nodeが属するForest
29 */ 38 */
30 public Forest getForest(); 39 public Forest getForest();
31 40
32 /** 41 /*
33 * 子供Nodeのリストを取得します.. 42 * 属性関連のメソッド
34 * @return 子供Nodeのリスト 43 * get,getAll,put,putAll,remove,removeAll,clear
35 */ 44 */
36 public List<Node> children();
37
38 /**
39 * このNodeが保持するデータをマップとしてすべて取得します.
40 * @return Nodeが保持するすべてのデータのマップ
41 */
42 public Map<ByteBuffer,ByteBuffer> getAll();
43 45
44 /** 46 /**
45 * このNodeが保持する値の中で指定されたキーと対応する値を取得します. 47 * このNodeが保持する値の中で指定されたキーと対応する値を取得します.
46 * @param _key データに対応するキー 48 * @param _key データに対応するキー
47 * @return キーと対応する値,見つからない場合はnull 49 * @return キーと対応する値,見つからない場合はnull
48 */ 50 */
49 public ByteBuffer get(ByteBuffer _key); 51 public ByteBuffer get(ByteBuffer _key);
50 52
51 /** 53 /**
52 * 指定されたリストに含まれるNodeを,すべて子供Nodeとして追加します. 54 * このNodeが保持するデータをマップとしてすべて取得します.
53 * @param _children 追加される子供Nodeを保持するリスト 55 * @return Nodeが保持するすべてのデータのマップ
54 */ 56 */
55 public void addAll(List<Node> _children); 57 public Map<ByteBuffer,ByteBuffer> getAll();
56
57 /**
58 * 指定されたNodeを子供Nodeとして追加します.
59 * @param _child
60 */
61 public void add(Node _child);
62
63 /**
64 * 指定されたNodeを削除します。
65 * @param _child
66 */
67 public void remove(Node _child);
68
69 /**
70 * 指定した子供を全て削除します.
71 * @param _children 削除される子供
72 */
73 public void removeAll(List<Node> _children);
74 58
75 /** 59 /**
76 * キーとそれに対応する値を保存します.キーが重複した場合は上書きされます. 60 * キーとそれに対応する値を保存します.キーが重複した場合は上書きされます.
77 * @param _key キー 61 * @param _key キー
78 * @param _value 値 62 * @param _value 値
79 */ 63 */
80 public void put(ByteBuffer _key,ByteBuffer _value); 64 public void put(ByteBuffer _key,ByteBuffer _value);
81 65
82 /** 66 /**
67 * キーとそれに対応する値を複数保持するマップを引数としてとり,マップが保持する値をすべて追加します.
68 * @param _map 追加される値のマップ
69 */
70 public void putAll(Map<ByteBuffer,ByteBuffer> _map);
71
72 /**
83 * キーとそれに対応する値を削除します。 73 * キーとそれに対応する値を削除します。
84 * @param _key キー 74 * @param _key キー
85 */ 75 */
86 public void remove(ByteBuffer _key); 76 public void remove(ByteBuffer _key);
87 77
88 /** 78 /**
89 * キーとそれに対応する値を複数保持するマップを引数としてとり,マップが保持する値をすべて追加します. 79 * Keyの集合すべてを削除します.
90 * @param _map 追加される値のマップ 80 * @param _key
91 */ 81 */
92 public void putAll(Map<ByteBuffer,ByteBuffer> _map); 82 public void removeAll(Set<ByteBuffer> _key);
83
84 /**
85 * Keyの集合全てを削除します.
86 */
87 public void clear();
88
89 /*
90 * 子供関連
91 * getChildren,addChild,addChildren,removeChild,removeChildren,clearChildren
92 */
93
94 /**
95 * 子供のIteratorを取得します.このIteratorは編集するためのメソッドは実装しません.
96 * 呼び出した場合は例外は発生します.
97 * @return 子供NodeのIterator
98 */
99 public Iterator<Node> getChildren();
100
101 /**
102 * 指定されたNodeを子供Nodeとして追加します.
103 * @param _child
104 */
105 public void addChild(Node _child);
106
107 /**
108 * 指定されたリストに含まれるNodeを,すべて子供Nodeとして追加します.
109 * @param _children 追加される子供Nodeを保持するリスト
110 */
111 public void addChildren(List<Node> _children);
112
113 /**
114 * 指定されたNodeを削除します。
115 * @param _child
116 */
117 public void removeChild(Node _child);
118
119 /**
120 * 指定した子供を全て削除します.
121 * @param _children 削除される子供
122 */
123 public void removeChildren(List<Node> _children);
124
125 /**
126 * 全ての子供を削除します.
127 */
128 public void clearChildren();
93 } 129 }