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