view src/treecms/memory/OnMemoryNode.java @ 12:fbbb7e414346

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

package treecms.memory;

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

import treecms.api.Forest;
import treecms.api.Node;
import treecms.api.NodeData;
import treecms.api.NodeID;

/**
 * オンメモリ上でのNodeの実装です。 
 * @author shoshi
 */
class OnMemoryNode implements Node
{
	private OnMemoryForest m_forest;
	
	private NodeID m_id;
	private NodeData m_data;
	
	/**
	 * コンストラクタ
	 * @param _forest このNodeが属するForestです.
	 * @param _id このNodeのNodeIDです.
	 * @param _newData このNodeに割り当てるNodeDataです.防御的にコピーします.
	 */
	public OnMemoryNode(OnMemoryForest _forest,NodeID _id,NodeData _newData)
	{
		m_id = _id;
		m_forest = _forest;
		m_data = (_newData != null) ? _newData.deepCopy() : new NodeData();
	}
	
	/*
	 * Nodeの情報関連
	 */
	
	@Override
	public Forest getForest()
	{
		return m_forest;
	}
	
	@Override
	public NodeID getID()
	{
		return m_id;
	}

	@Override
	public NodeData getData()
	{
		return m_data.deepCopy();
	}
	
	/*
	 * 子供関連のメソッド
	 */
	
	@Override
	public Iterator<Node> getChildren()
	{
		//Iteratorが変更不可なので、そのまま渡しても構わない
		return m_data.getChildren();
	}

	@Override
	public void addChild(Node _child)
	{
		m_data.addChild(_child);
	}
	
	@Override
	public void addChildren(List<Node> _child)
	{
		m_data.addChildren(_child);
	}
	
	@Override
	public void removeChild(Node _child)
	{
		m_data.removeChild(_child);
	}
	
	@Override
	public void removeChildren(List<Node> _children)
	{
		m_data.removeChildren(_children);
	}
	
	@Override
	public void clearChildren()
	{
		m_data.clearChildren();
	}

	/*
	 * 要素関連のメソッド
	 */

	@Override
	public ByteBuffer get(ByteBuffer _key)
	{
		return m_data.get(_key);
	}

	@Override
	public Map<ByteBuffer,ByteBuffer> getAll()
	{
		return m_data.getAll();
	}

	@Override
	public void put(ByteBuffer _key, ByteBuffer _value)
	{
		m_data.put(_key,_value);
	}

	@Override
	public void putAll(Map<ByteBuffer, ByteBuffer> _map)
	{
		m_data.putAll(_map);
	}

	@Override
	public void remove(ByteBuffer _key)
	{
		m_data.remove(_key);
	}
	
	@Override
	public void removeAll(Set<ByteBuffer> _keySet)
	{
		m_data.removeAll(_keySet);
	}
	
	@Override
	public void clear()
	{
		m_data.clear();
	}
	
	@Override
	public int hashCode()
	{
		return m_id.hashCode();
	}
	
	@Override
	public String toString()
	{
		return getID().toString();
	}
}