diff src/treecms/memory/OnMemoryMonotonicTree.java @ 26:9cb971a68cc5

added CachedForest.java
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 Jul 2011 20:22:53 +0900
parents c1e7ec6b3d44
children aecc55e87143
line wrap: on
line diff
--- a/src/treecms/memory/OnMemoryMonotonicTree.java	Tue Jul 12 14:39:35 2011 +0900
+++ b/src/treecms/memory/OnMemoryMonotonicTree.java	Mon Jul 18 20:22:53 2011 +0900
@@ -2,32 +2,45 @@
 
 import treecms.api.MonotonicTree;
 import treecms.api.MonotonicTreeNode;
-import treecms.tree.util.LockableNodeTable;
+import treecms.api.Node;
+import treecms.tree.id.NodeIDProvider;
 
 public class OnMemoryMonotonicTree implements MonotonicTree
 {
 	private final OnMemoryMonotonicTree m_tree;
-	private final LockableNodeTable m_table;
-	private final OnMemoryMonotonicTreeNode m_root;
+	private volatile OnMemoryMonotonicTreeNode m_root;
 	
-	private OnMemoryMonotonicTree(OnMemoryNode _root,OnMemoryMonotonicTree _tree)
+	private OnMemoryMonotonicTree(NodeIDProvider _provider,OnMemoryMonotonicTree _tree)
 	{
 		m_tree = _tree;
-		m_table = new LockableNodeTable();
-		m_table.register(_root);
-		m_root = new OnMemoryMonotonicTreeNode(_root,null,m_table);
+		m_root = new OnMemoryMonotonicTreeNode(new OnMemoryNode(_provider.create(),null),null);
 	}
 	
-	public static OnMemoryMonotonicTree createInstance(OnMemoryNode _root,OnMemoryMonotonicTree _tree)
+	public static OnMemoryMonotonicTree createInstance(NodeIDProvider _provider,OnMemoryMonotonicTree _tree)
 	{
-		OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_root,_tree);
+		OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_provider,_tree);
 		return tree;
 	}
 	
 	public OnMemoryNode get(String _fid)
 	{
-		OnMemoryNode node = (OnMemoryNode)m_table.tip(_fid);
-		return node;
+		return (OnMemoryNode)search(_fid,m_root.getNode());
+	}
+	
+	private Node search(String _fid,Node _node)
+	{
+		if(_node.getID().getFamilyID().equals(_fid)){
+			return _node;
+		}
+		
+		for(Node child : _node.getList()){
+			Node ret = search(_fid,child);
+			if(ret != null){
+				return ret;
+			}
+		}
+		
+		return null;
 	}
 	
 	@Override