view src/treecms/api/TreeNode.java @ 12:fbbb7e414346

modified OnMemoryNode,OnMemoryTreeNode,OnMemoryMonotonicTreeNode
author shoshi
date Wed, 11 May 2011 03:34:01 +0900
parents 85061e874775
children 8bf59f161b23
line wrap: on
line source

package treecms.api;

import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * DoubleLinkedなNodeの実装です.SingleLinkedなNodeの実装と違い,親の情報を保持します.
 * 非破壊的木構造の実装では,Nodeは子どもの情報しか持っていません.これは,一つのNodeに対して複数の親が存在するためです.
 * 木構造内のあるNodeへのRootNodeからのパスを検索する手間を省くことが出来ます.
 * 
 * なのでSingleLinkedとDoubleLinkedを分けて,DoubleLinkedはSingleLinkedを内包した形で実装します.
 * TreeNodeがNodeのインターフェイスを継承していないのは,継承するとSingleLinkedなNodeに子供として追加できるようになるからです.
 * 
 * また,TreeNodeを編集したときは非破壊的に編集されず、破壊的に編集されます.
 * @author shoshi
 */
public interface TreeNode
{
	/*
	 * 属性関連のメソッド
	 */
	public ByteBuffer get(ByteBuffer _key);
	public Map<ByteBuffer,ByteBuffer> getAll();
	public void put(ByteBuffer _key,ByteBuffer _value);
	public void putAll(Map<ByteBuffer,ByteBuffer> _map);
	public void remove(ByteBuffer _key);
	public void removeAll(Set<ByteBuffer> _keys);
	public void clear();
	
	/*
	 * 子供関連のメソッド 
	 */
	public Iterator<TreeNode> getChildren();
	public void addChild(TreeNode _n);
	public void addChildren(List<TreeNode> _list);
	public void removeChild(TreeNode _n);
	public void removeChildren(List<TreeNode> _list);
	public void clearChildren();
	
	/*
	 * 親関連のメソッド
	 */
	public NodeID getID();
	public Forest getForest();
	public TreeNode getParent();
	public Node getNode();
}