Mercurial > hg > Members > tatsuki > bench > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java @ 179:817febd9c69b
change transaction
author | tatsuki |
---|---|
date | Tue, 17 Mar 2015 11:19:04 +0900 |
parents | a2598139df64 |
children | 066d9c5758dc |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Sun Mar 15 20:52:15 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Tue Mar 17 11:19:04 2015 +0900 @@ -2,32 +2,30 @@ 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.ChangeSet; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTransactionManager; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; 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.shoshi.jungle.util.GetOldTreeError; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; +import java.util.concurrent.atomic.AtomicReference; + public class DefaultJungleTree implements JungleTree { - private final AtomicReservableReference<TreeContext> repository; + private final AtomicReference<TreeContext> repository; private final String uuid; private final ChangeListWriter writer; private final TreeEditor treeEditor; public DefaultJungleTree(TreeContext tc, String uuid, ChangeListWriter writer, TreeEditor editor) { - this.repository = new AtomicReservableReference<TreeContext>(tc); + this.repository = new AtomicReference<TreeContext>(tc); this.uuid = uuid; this.writer = writer; this.treeEditor = editor; @@ -37,7 +35,7 @@ public JungleTreeEditor getTreeEditor() { TreeContext tc = repository.get(); DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); - TreeNode root = tc.getTreeNode(); + TreeNode root = tc.getRoot(); return new DefaultJungleTreeEditor(root, txManager, treeEditor); } @@ -49,62 +47,53 @@ @Override public TreeNode getRootNode() { TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - return cs.getRoot(); + return tc.getRoot(); } @Override public InterfaceTraverser getTraverser(boolean useIndex) { - AtomicReservableReference<TreeContext>.Reservation reservation = repository.getReservation(); - IndexManager indexManager = new IndexManager(reservation); TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index = getIndex(); ParentIndex parentIndex = getParentIndex(); - return new InterfaceTraverser(getRootNode(), index, parentIndex, indexManager, useIndex); + return new InterfaceTraverser(repository.get().getRoot(), index, parentIndex, useIndex); } @Override public ParentIndex getParentIndex() { TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - return cs.getParentIndex(); + return tc.getParentIndex(); } @Override public TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> getIndex() { TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - return cs.getIndex(); + return tc.getIndex(); } @Override public long revision() { TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - return cs.revision(); + return tc.revision(); } @Override public Either<Error, JungleTree> getOldTree(long revision) { TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - for (; cs.revision() != revision;) { - cs = cs.prev(); - if (cs == null) + for (; tc.revision() != revision;) { + tc = tc.prev(); + if (tc == null) return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); } - TreeNode root = cs.getRoot(); - TreeContext oldTc = new DefaultTreeContext(root, cs); String oldTreeUuid = uuid + revision; - JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeUuid, writer, treeEditor); + JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, writer, treeEditor); return DefaultEither.newB(oldTree); } @Override public Either<Error, TreeNode> getNodeOfPath(NodePath path) { - TreeNode node = repository.get().getTreeNode(); + TreeNode node = repository.get().getRoot(); for (int num : path) { if (num == -1) continue;