comparison 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
comparison
equal deleted inserted replaced
25:c1e7ec6b3d44 26:9cb971a68cc5
1 package treecms.memory; 1 package treecms.memory;
2 2
3 import treecms.api.MonotonicTree; 3 import treecms.api.MonotonicTree;
4 import treecms.api.MonotonicTreeNode; 4 import treecms.api.MonotonicTreeNode;
5 import treecms.tree.util.LockableNodeTable; 5 import treecms.api.Node;
6 import treecms.tree.id.NodeIDProvider;
6 7
7 public class OnMemoryMonotonicTree implements MonotonicTree 8 public class OnMemoryMonotonicTree implements MonotonicTree
8 { 9 {
9 private final OnMemoryMonotonicTree m_tree; 10 private final OnMemoryMonotonicTree m_tree;
10 private final LockableNodeTable m_table; 11 private volatile OnMemoryMonotonicTreeNode m_root;
11 private final OnMemoryMonotonicTreeNode m_root;
12 12
13 private OnMemoryMonotonicTree(OnMemoryNode _root,OnMemoryMonotonicTree _tree) 13 private OnMemoryMonotonicTree(NodeIDProvider _provider,OnMemoryMonotonicTree _tree)
14 { 14 {
15 m_tree = _tree; 15 m_tree = _tree;
16 m_table = new LockableNodeTable(); 16 m_root = new OnMemoryMonotonicTreeNode(new OnMemoryNode(_provider.create(),null),null);
17 m_table.register(_root);
18 m_root = new OnMemoryMonotonicTreeNode(_root,null,m_table);
19 } 17 }
20 18
21 public static OnMemoryMonotonicTree createInstance(OnMemoryNode _root,OnMemoryMonotonicTree _tree) 19 public static OnMemoryMonotonicTree createInstance(NodeIDProvider _provider,OnMemoryMonotonicTree _tree)
22 { 20 {
23 OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_root,_tree); 21 OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(_provider,_tree);
24 return tree; 22 return tree;
25 } 23 }
26 24
27 public OnMemoryNode get(String _fid) 25 public OnMemoryNode get(String _fid)
28 { 26 {
29 OnMemoryNode node = (OnMemoryNode)m_table.tip(_fid); 27 return (OnMemoryNode)search(_fid,m_root.getNode());
30 return node; 28 }
29
30 private Node search(String _fid,Node _node)
31 {
32 if(_node.getID().getFamilyID().equals(_fid)){
33 return _node;
34 }
35
36 for(Node child : _node.getList()){
37 Node ret = search(_fid,child);
38 if(ret != null){
39 return ret;
40 }
41 }
42
43 return null;
31 } 44 }
32 45
33 @Override 46 @Override
34 public boolean commit(boolean _force) 47 public boolean commit(boolean _force)
35 { 48 {