2
|
1 package treecms.memory;
|
|
2
|
6
|
3 import java.util.Map;
|
2
|
4 import java.util.concurrent.ConcurrentHashMap;
|
|
5 import treecms.api.Forest;
|
21
|
6 import treecms.api.Node;
|
2
|
7 import treecms.api.NodeID;
|
11
|
8 import treecms.api.MonotonicTree;
|
21
|
9 import treecms.tree.id.RandomNodeID;
|
16
|
10 import treecms.tree.util.NodeData;
|
2
|
11
|
|
12 public class OnMemoryForest implements Forest
|
|
13 {
|
20
|
14 private final Map<NodeID,OnMemoryNode> m_table;
|
|
15 private final Map<String,OnMemoryNode> m_tipTable;
|
21
|
16 private final OnMemoryMonotonicTree m_mainTree;
|
2
|
17
|
|
18 public OnMemoryForest()
|
|
19 {
|
|
20 m_table = new ConcurrentHashMap<NodeID,OnMemoryNode>();
|
6
|
21 m_tipTable = new ConcurrentHashMap<String,OnMemoryNode>();
|
8
|
22
|
21
|
23 OnMemoryNode root = (OnMemoryNode)create();
|
|
24 m_mainTree = new OnMemoryMonotonicTree(root);
|
2
|
25 }
|
|
26
|
21
|
27 private NodeID createID(String _fid)
|
2
|
28 {
|
21
|
29 return new RandomNodeID(_fid);
|
2
|
30 }
|
|
31
|
|
32 @Override
|
20
|
33 public MonotonicTree get(NodeID _id)
|
2
|
34 {
|
21
|
35 OnMemoryNode node = m_table.get(_id);
|
|
36 return new OnMemoryMonotonicTree(node);
|
2
|
37 }
|
|
38
|
|
39 @Override
|
20
|
40 public MonotonicTree create()
|
2
|
41 {
|
21
|
42 OnMemoryNode node = createNode(createID(null),null);
|
|
43 OnMemoryMonotonicTree tree = new OnMemoryMonotonicTree(node);
|
|
44 return tree;
|
7
|
45 }
|
|
46
|
|
47 @Override
|
21
|
48 public MonotonicTree create(NodeData<Node> _data)
|
2
|
49 {
|
21
|
50 OnMemoryNode node = createNode(null,_data);
|
|
51 return new OnMemoryMonotonicTree(node);
|
7
|
52 }
|
8
|
53
|
21
|
54 @Override
|
|
55 public MonotonicTree getTip(String _fid)
|
|
56 {
|
|
57 OnMemoryNode node = m_tipTable.get(_fid);
|
|
58 return new OnMemoryMonotonicTree(node);
|
|
59 }
|
|
60
|
8
|
61 @Override
|
20
|
62 public MonotonicTree getMainTree()
|
8
|
63 {
|
21
|
64 return m_mainTree;
|
17
|
65 }
|
|
66
|
21
|
67 public OnMemoryNode createNode(NodeID _newID,NodeData<Node> _newData)
|
7
|
68 {
|
21
|
69 OnMemoryNode newNode = new OnMemoryNode(this,_newID,_newData);
|
|
70 m_table.put(newNode.getID(),newNode);
|
|
71 m_tipTable.put(newNode.getID().getFamilyID(),newNode);
|
|
72 return newNode;
|
2
|
73 }
|
|
74 }
|