diff 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
line wrap: on
line diff
--- a/src/treecms/api/Node.java	Fri May 06 00:42:57 2011 +0900
+++ b/src/treecms/api/Node.java	Wed May 11 03:34:01 2011 +0900
@@ -1,12 +1,20 @@
 package treecms.api;
 
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.nio.ByteBuffer;
 
 /**
  * 木構造の基本のデータ単位であるNodeを示します.Nodeは子供のリストとデータのマップを保持します.また,クライアントはノードが保持しているデータをNodeDataとして
  * 取得することが出来ます.
+ * 
+ * NodeはSingleLinkで子供Nodeへのパスしか保持していません、どのNodeが親かどうか判断するのは不可能です.
+ * このようにしたのは,非破壊的木構造を実装するに当たり,編集対象のNodeの親を検索するのが困難であるからです.
+ * DoubleLinkな実装はTree/MonotonicTreeで行います.
+ * 
+ * また,重複した子供を追加することは出来ません,このインターフェイスを実装するクラスはそのように実装します.
  * @author shoshi
  */
 public interface Node
@@ -19,6 +27,7 @@
 	
 	/**
 	 * Nodeが保持するデータを取得します.クライアントはこのメソッドを用いて取得されるNodeDataを用いてNodeの内容を<b>変更できません</b>。
+	 * 変更を加えた場合は無視されるか、例外が発生します.
 	 * @return Nodeが保持するNodeData
 	 */
 	public NodeData getData();
@@ -29,17 +38,10 @@
 	 */
 	public Forest getForest();
 	
-	/**
-	 * 子供Nodeのリストを取得します..
-	 * @return 子供Nodeのリスト
+	/*
+	 * 属性関連のメソッド
+	 * get,getAll,put,putAll,remove,removeAll,clear
 	 */
-	public List<Node> children();
-	
-	/**
-	 * このNodeが保持するデータをマップとしてすべて取得します.
-	 * @return Nodeが保持するすべてのデータのマップ
-	 */
-	public Map<ByteBuffer,ByteBuffer> getAll();
 	
 	/**
 	 * このNodeが保持する値の中で指定されたキーと対応する値を取得します.
@@ -49,28 +51,10 @@
 	public ByteBuffer get(ByteBuffer _key);
 	
 	/**
-	 * 指定されたリストに含まれるNodeを,すべて子供Nodeとして追加します.
-	 * @param _children 追加される子供Nodeを保持するリスト
-	 */
-	public void addAll(List<Node> _children);
-	
-	/**
-	 * 指定されたNodeを子供Nodeとして追加します.
-	 * @param _child
+	 * このNodeが保持するデータをマップとしてすべて取得します.
+	 * @return Nodeが保持するすべてのデータのマップ
 	 */
-	public void add(Node _child);
-	
-	/**
-	 * 指定されたNodeを削除します。
-	 * @param _child
-	 */
-	public void remove(Node _child);
-	
-	/**
-	 * 指定した子供を全て削除します.
-	 * @param _children 削除される子供
-	 */
-	public void removeAll(List<Node> _children);
+	public Map<ByteBuffer,ByteBuffer> getAll();
 	
 	/**
 	 * キーとそれに対応する値を保存します.キーが重複した場合は上書きされます.
@@ -80,14 +64,66 @@
 	public void put(ByteBuffer _key,ByteBuffer _value);
 	
 	/**
+	 * キーとそれに対応する値を複数保持するマップを引数としてとり,マップが保持する値をすべて追加します.
+	 * @param _map 追加される値のマップ
+	 */
+	public void putAll(Map<ByteBuffer,ByteBuffer> _map);
+	
+	/**
 	 * キーとそれに対応する値を削除します。
 	 * @param _key キー
 	 */
 	public void remove(ByteBuffer _key);
 	
 	/**
-	 * キーとそれに対応する値を複数保持するマップを引数としてとり,マップが保持する値をすべて追加します.
-	 * @param _map 追加される値のマップ
+	 * Keyの集合すべてを削除します.
+	 * @param _key
+	 */
+	public void removeAll(Set<ByteBuffer> _key);
+	
+	/**
+	 * Keyの集合全てを削除します.
+	 */
+	public void clear();
+	
+	/*
+	 * 子供関連
+	 * getChildren,addChild,addChildren,removeChild,removeChildren,clearChildren
+	 */
+	
+	/**
+	 * 子供のIteratorを取得します.このIteratorは編集するためのメソッドは実装しません.
+	 * 呼び出した場合は例外は発生します.
+	 * @return 子供NodeのIterator
+	 */
+	public Iterator<Node> getChildren();
+	
+	/**
+	 * 指定されたNodeを子供Nodeとして追加します.
+	 * @param _child
 	 */
-	public void putAll(Map<ByteBuffer,ByteBuffer> _map);
-}
\ No newline at end of file
+	public void addChild(Node _child);
+	
+	/**
+	 * 指定されたリストに含まれるNodeを,すべて子供Nodeとして追加します.
+	 * @param _children 追加される子供Nodeを保持するリスト
+	 */
+	public void addChildren(List<Node> _children);
+	
+	/**
+	 * 指定されたNodeを削除します。
+	 * @param _child
+	 */
+	public void removeChild(Node _child);
+	
+	/**
+	 * 指定した子供を全て削除します.
+	 * @param _children 削除される子供
+	 */
+	public void removeChildren(List<Node> _children);
+	
+	/**
+	 * 全ての子供を削除します. 
+	 */
+	public void clearChildren();
+}