namespace JungleDB { public class DefaultJungleTree : JungleTree { private AtomicReference repository; private string uuid; private ChangeListWriter writer; private TreeEditor treeEditor; public DefaultJungleTree(TreeContext tc, string uuid, ChangeListWriter writer, TreeEditor editor) { this.repository = new AtomicReference(tc); this.uuid = uuid; this.writer = writer; this.treeEditor = editor; } public JungleTreeEditor getTreeEditor() { TreeContext tc = repository.Get (); DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); TreeNode root = tc.getRoot(); return new DefaultJungleTreeEditor(root, txManager, treeEditor); } public JungleTreeEditor getLocalTreeEditor() { return getTreeEditor (); } public TreeNode getRootNode() { TreeContext tc = repository.Get(); return tc.getRoot(); // default jungle innner change list? } public InterfaceTraverser getTraverser(bool useIndex) { TreeContext tc = repository.Get(); return tc.getTraverser(); } public TreeMap>> getIndex() { TreeContext tc = repository.Get(); return tc.getIndex(); } public long revision() { TreeContext tc = repository.Get(); return tc.getRevision(); } public Either getOldTree(long revision) { TreeContext tc = repository.Get(); for (; tc.getRevision() != revision; ) { tc = tc.prev(); if (tc == null) return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); } string oldTreeUuid = uuid + revision; JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, writer, treeEditor); return DefaultEither.newB(oldTree); } public Either getNodeOfPath(NodePath path) { //eitherはどちらのインターフェースをつかうか、みたいな TreeNode node = repository.Get().getRoot(); foreach (int num in path) { if (num == -1) continue; Either either = node.getChildren().at(num); if (either.isA()) return either; node = either.b(); } return DefaultEither.newB(node); } public void setBufferSize(int _bufferSize) { // not use } } }