# HG changeset patch # User tatsuki # Date 1427095127 -32400 # Node ID fd4064e110bd0cbe7d2a6fb14f9a90ea4ff07e87 # Parent 89c15aa2bc6de31aac1d917469167ef76b3a5558 change TreeContext diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/core/NetworkDefaultJungle.java --- a/src/main/java/alice/jungle/core/NetworkDefaultJungle.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/core/NetworkDefaultJungle.java Mon Mar 23 16:18:47 2015 +0900 @@ -14,6 +14,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; import fj.Ord; import fj.data.List; @@ -57,9 +58,8 @@ } }; TreeNode root = new DefaultTreeNode(); - TreeMap>> indexList = TreeMap.empty(Ord.stringOrd); - TreeMap parentIndex = new ParentIndex().getParentIndex(); - TreeContext tc = new DefaultTreeContext(root, null, list, uuid, name, 0, indexList, parentIndex); + InterfaceTraverser traverser = new InterfaceTraverser(root,true); + TreeContext tc = new DefaultTreeContext(root, null, list, uuid, name, 0, traverser); JungleTree newTree = new NetworkDefaultJungleTree(name, tc, uuid, journal.getWriter(), editor); if (trees.putIfAbsent(name, newTree) != null) { return null; diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/persistent/PersistentJungle.java --- a/src/main/java/alice/jungle/persistent/PersistentJungle.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/persistent/PersistentJungle.java Mon Mar 23 16:18:47 2015 +0900 @@ -14,6 +14,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; public class PersistentJungle implements Jungle { @@ -54,9 +55,8 @@ } }; TreeNode root = new DefaultTreeNode(); - TreeMap>> indexList = TreeMap.empty(Ord.stringOrd); - TreeMap parentIndex = new ParentIndex().getParentIndex(); - TreeContext tc = new PersistentTreeContext(root, null, list, uuid, name, 0, indexList, parentIndex); + InterfaceTraverser traverser = new InterfaceTraverser(root,true); + TreeContext tc = new PersistentTreeContext(root, null, list, uuid, name, 0, traverser); JungleTree newTree = new PersistentJungleTree(name, tc, uuid, journal.getWriter(), editor); if (trees.putIfAbsent(name, newTree) != null) { return null; diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/persistent/PersistentJungleTree.java --- a/src/main/java/alice/jungle/persistent/PersistentJungleTree.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/persistent/PersistentJungleTree.java Mon Mar 23 16:18:47 2015 +0900 @@ -1,5 +1,6 @@ package alice.jungle.persistent; +import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; @@ -85,14 +86,14 @@ } @Override - public TreeMap>> getIndex() { + public TreeMap>> getIndex() { TreeContext tc = repository.get(); return tc.getIndex(); } @Override public InterfaceTraverser getTraverser(boolean useIndex) { - TreeMap>> index = getIndex(); + TreeMap>> index = getIndex(); ParentIndex parentIndex = getParentIndex(); return new InterfaceTraverser(getRootNode(), index, parentIndex, useIndex); } diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/persistent/PersistentTransactionManager.java --- a/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java Mon Mar 23 16:18:47 2015 +0900 @@ -1,6 +1,7 @@ package alice.jungle.persistent; +import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext; @@ -16,55 +17,50 @@ import java.util.concurrent.atomic.AtomicReference; -public class PersistentTransactionManager implements TransactionManager { - private final AtomicReference repository; - private final TreeContext tip; - private final ChangeListWriter writer; - private final String uuid; - private final String treeName; +public class PersistentTransactionManager implements TransactionManager { + private final AtomicReference repository; + private final TreeContext tip; + private final ChangeListWriter writer; + private final String uuid; + private final String treeName; - public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext _tip, - AtomicReference _repository,String _uuid) - { - repository = _repository; - tip = _tip; - writer = _writer; - uuid = _uuid; - treeName = _treeName; - } - - @Override - public Either commit(TreeNode _newRoot,final TreeOperationLog _log) { - long currentRevision = tip.revision(); - long nextRevision = currentRevision + 1; + public PersistentTransactionManager(String _treeName, ChangeListWriter _writer, TreeContext _tip, + AtomicReference _repository, String _uuid) { + repository = _repository; + tip = _tip; + writer = _writer; + uuid = _uuid; + treeName = _treeName; + } - PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); - InterfaceTraverser traverser = new InterfaceTraverser(_newRoot,false); - traverser.createIndex(); - TreeMap>> index = traverser.getIndex(); - ParentIndex parentIndex = traverser.getParentIndex(); - PersistentTreeContext newContext = new PersistentTreeContext(_newRoot, tip, list, uuid, treeName, nextRevision, index, parentIndex.getParentIndex()); + @Override + public Either commit(TreeNode _newRoot, final TreeOperationLog _log) { + long currentRevision = tip.revision(); + long nextRevision = currentRevision + 1; - if (repository.compareAndSet(newContext.prev(),newContext)) { + PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); + InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, false); + traverser.createIndex(); + PersistentTreeContext newContext = new PersistentTreeContext(_newRoot, tip, list, uuid, treeName, nextRevision, traverser); + + if (repository.compareAndSet(newContext.prev(), newContext)) { TransactionManager txManager = new PersistentTransactionManager(treeName, writer, newContext, repository, uuid); return DefaultEither.newB(txManager); } return DefaultEither.newA((Error) new DefaultError()); - } + } - @Override - public long getRevision() - { - return tip.revision(); - } + @Override + public long getRevision() { + return tip.revision(); + } - @Override - public String getUUID() { - return uuid; - } - - - + @Override + public String getUUID() { + return uuid; + } + + } diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/persistent/PersistentTreeContext.java --- a/src/main/java/alice/jungle/persistent/PersistentTreeContext.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/persistent/PersistentTreeContext.java Mon Mar 23 16:18:47 2015 +0900 @@ -1,87 +1,82 @@ package alice.jungle.persistent; import fj.Ord; +import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; public class PersistentTreeContext implements TreeContext { - private final TreeNode root; - private final TreeContext previous; - private final ChangeList changeList; - private final String uuid; - private final long revision; - private final String treeName; - private TreeMap>> indexList; - private TreeMap parentIndex; - - public PersistentTreeContext(TreeNode _node, TreeContext _prev, ChangeList _log, String _uuid, String _treeName, - long _revision, TreeMap>> indexList, - TreeMap parentIndex) { - root = _node; - previous = _prev; - changeList = _log; - uuid = _uuid; - revision = _revision; - treeName = _treeName; - this.indexList = indexList; - this.parentIndex = parentIndex; - } - - @Override - public TreeNode getRoot() { - return root; - } - - @Override - public TreeContext prev() { - return previous; - } + private final TreeNode root; + private final TreeContext previous; + private final ChangeList changeList; + private final String uuid; + private final long revision; + private final String treeName; + private InterfaceTraverser traverser; - @Override - public ChangeList getChangeList() { - return changeList; - } - - @Override - public String uuid() { - return uuid; - } - - @Override - public long revision() { - return revision; - } - - @Override - public Iterable getOperations() { - return changeList; - } - - public String getTreeName() { - return treeName; - } - @Override - public TreeMap>> getIndex() { - return indexList; - } - - @Override - public ParentIndex getParentIndex() { - return new ParentIndex(parentIndex); - } + public PersistentTreeContext(TreeNode _node, TreeContext _prev, ChangeList _log, String _uuid, String _treeName, + long _revision, InterfaceTraverser traverser) { + this.root = _node; + this.previous = _prev; + this.changeList = _log; + this.uuid = _uuid; + this.revision = _revision; + this.treeName = _treeName; + this.traverser = traverser; + } @Override - public void setIndex(TreeMap>> indexList) { - this.indexList = indexList; + public TreeNode getRoot() { + return root; + } + + @Override + public TreeContext prev() { + return previous; + } + + @Override + public ChangeList getChangeList() { + return changeList; } @Override - public void setParentIndex(ParentIndex parentIndex) { - this.parentIndex = parentIndex.getParentIndex(); + public String uuid() { + return uuid; + } + + @Override + public long revision() { + return revision; + } + + @Override + public Iterable getOperations() { + return changeList; + } + + public String getTreeName() { + return treeName; + } + + @Override + public TreeMap>> getIndex() { + return traverser.getIndex(); + } + + @Override + public ParentIndex getParentIndex() { + return traverser.getParentIndex(); + } + + @Override + public InterfaceTraverser getTraverser() { + return traverser; } } diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java --- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java Mon Mar 23 16:18:47 2015 +0900 @@ -1,6 +1,7 @@ package alice.jungle.transaction; +import fj.data.List; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; @@ -90,15 +91,14 @@ } @Override - public TreeMap>> getIndex() { + public TreeMap>> getIndex() { TreeContext tc = repository.get(); return tc.getIndex(); } - @Override public InterfaceTraverser getTraverser(boolean useIndex) { - TreeMap>> index = getIndex(); + TreeMap>> index = getIndex(); ParentIndex parentIndex = getParentIndex(); return new InterfaceTraverser(getRootNode(), index, parentIndex, useIndex); } diff -r 89c15aa2bc6d -r fd4064e110bd src/main/java/alice/jungle/transaction/NetworkTransactionManager.java --- a/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java Fri Mar 20 16:18:42 2015 +0900 +++ b/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java Mon Mar 23 16:18:47 2015 +0900 @@ -3,10 +3,8 @@ import java.util.Iterator; import java.util.concurrent.atomic.AtomicReference; -import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; @@ -18,7 +16,6 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; public class NetworkTransactionManager implements TransactionManager { private final AtomicReference repository; @@ -60,9 +57,7 @@ InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); traverser.createIndex(); - TreeMap>> index = traverser.getIndex(); - ParentIndex parentIndex = traverser.getParentIndex(); - TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, treeName, nextRevision,index,parentIndex.getParentIndex()); + TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, treeName, nextRevision,traverser); if (repository.compareAndSet(newTreeContext.prev(),newTreeContext)) {