view src/treecms/memory/OnMemoryForest.java @ 21:f3150b37f9be

commit
author shoshi
date Mon, 06 Jun 2011 21:49:04 +0900
parents 084de6909451
children fa784faafc78
line wrap: on
line source

package treecms.memory;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import treecms.api.Forest;
import treecms.api.Node;
import treecms.api.NodeID;
import treecms.api.MonotonicTree;
import treecms.tree.id.RandomNodeID;
import treecms.tree.util.NodeData;

public class OnMemoryForest implements Forest
{
	private final Map<NodeID,OnMemoryNode> m_table;
	private final Map<String,OnMemoryNode> m_tipTable;
	private final OnMemoryMonotonicTree m_mainTree;
	
	public OnMemoryForest()
	{
		m_table = new ConcurrentHashMap<NodeID,OnMemoryNode>();
		m_tipTable = new ConcurrentHashMap<String,OnMemoryNode>();
		
		OnMemoryNode root = (OnMemoryNode)create();
		m_mainTree = new OnMemoryMonotonicTree(root);
	}
	
	private NodeID createID(String _fid)
	{
		return new RandomNodeID(_fid);
	}

	@Override
	public MonotonicTree get(NodeID _id)
	{
		OnMemoryNode node = m_table.get(_id);
		return new OnMemoryMonotonicTree(node);
	}
	
	@Override
	public MonotonicTree create()
	{
		OnMemoryNode node = createNode(createID(null),null);
		OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(node);
		return tree;
	}

	@Override
	public MonotonicTree create(NodeData<Node> _data)
	{
		OnMemoryNode node = createNode(null,_data);
		return new OnMemoryMonotonicTree(node);
	}

	@Override
	public MonotonicTree getTip(String _fid)
	{
		OnMemoryNode node = m_tipTable.get(_fid);
		return new OnMemoryMonotonicTree(node);
	}

	@Override
	public MonotonicTree getMainTree()
	{
		return m_mainTree;
	}
	
	public OnMemoryNode createNode(NodeID _newID,NodeData<Node> _newData)
	{
		OnMemoryNode newNode = new OnMemoryNode(this,_newID,_newData);
		m_table.put(newNode.getID(),newNode);
		m_tipTable.put(newNode.getID().getFamilyID(),newNode);
		return newNode;
	}
}