annotate Main/jungle-main/DefaultJungleTree.cs @ 31:1466993c104c

byte[] to object Rewrite.
author Kazuma Takeda
date Fri, 20 Jan 2017 07:08:03 +0900
parents 1f99e150f336
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
1 
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
2
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
3 namespace JungleDB {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
4 public class DefaultJungleTree : JungleTree {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
5
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
6 private AtomicReference<TreeContext> repository;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
7 private string uuid;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
8 private ChangeListWriter writer;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
9 private TreeEditor treeEditor;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
10
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
11
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
12 public DefaultJungleTree(TreeContext tc, string uuid, ChangeListWriter writer, TreeEditor editor) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
13 this.repository = new AtomicReference<TreeContext>(tc);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
14 this.uuid = uuid;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
15 this.writer = writer;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
16 this.treeEditor = editor;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
17 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
18
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
19 public JungleTreeEditor getTreeEditor() {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
20 TreeContext tc = repository.Get ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
21 DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
22 TreeNode root = tc.getRoot();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
23 return new DefaultJungleTreeEditor(root, txManager, treeEditor);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
24 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
25
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
26 public JungleTreeEditor getLocalTreeEditor() {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
27 return getTreeEditor ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
28 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
29
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
30 public TreeNode getRootNode() {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
31 TreeContext tc = repository.Get();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
32 return tc.getRoot(); // default jungle innner change list?
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
33 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
34
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
35 public InterfaceTraverser getTraverser(bool useIndex) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
36 TreeContext tc = repository.Get();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
37 return tc.getTraverser();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
38 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
39
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
40 public TreeMap<string, TreeMap<string, List<TreeNode>>> getIndex() {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
41 TreeContext tc = repository.Get();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
42 return tc.getIndex();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
43 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
44
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
45 public long revision() {
31
1466993c104c byte[] to object Rewrite.
Kazuma Takeda
parents: 20
diff changeset
46 TreeContext tc = repository.Get();
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
47 return tc.getRevision();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
48 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
49
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
50 public Either<Error, JungleTree> getOldTree(long revision) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
51 TreeContext tc = repository.Get();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
52
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
53 for (; tc.getRevision() != revision; ) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
54 tc = tc.prev();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
55 if (tc == null)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
56 return DefaultEither<Error, JungleTree>.newA(GetOldTreeError.OLD_TREE_NOT_FOUND);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
57 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
58
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
59
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
60 string oldTreeUuid = uuid + revision;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
61 JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, writer, treeEditor);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
62 return DefaultEither<Error, JungleTree>.newB(oldTree);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
63 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
64
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
65 public Either<Error, TreeNode> getNodeOfPath(NodePath path) { //eitherはどちらのインターフェースをつかうか、みたいな
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
66 TreeNode node = repository.Get().getRoot();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
67 foreach (int num in path) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
68 if (num == -1)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
69 continue;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
70 Either<Error, TreeNode> either = node.getChildren().at(num);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
71 if (either.isA())
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
72 return either;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
73 node = either.b();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
74 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
75 return DefaultEither<Error, TreeNode>.newB(node);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
76 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
77
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
78 public void setBufferSize(int _bufferSize) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
79 // not use
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
80 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
81
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
82 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
83 }