Mercurial > hg > Members > shoshi > TreeCMSv2
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