Mercurial > hg > Database > jungle-sharp
diff src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-network/transaction/NetworkDefaultJungleTree.cs @ 10:abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
author | Kazuma Takeda <kazuma-arashi@hotmail.co.jp> |
---|---|
date | Sun, 23 Oct 2016 07:40:50 +0900 |
parents | |
children | b71d9ea6bd8e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-network/transaction/NetworkDefaultJungleTree.cs Sun Oct 23 07:40:50 2016 +0900 @@ -0,0 +1,83 @@ +using UnityEngine; +using System.Collections; + +public class NetworkDefaultJungleTree : JungleTree { + + private readonly AtomicReference<TreeContext> Repository; + private readonly string Uuid; + private readonly string TreeName; + private readonly ChangeListWriter Writer; + private readonly TreeEditor Editor; + + public NetworkDefaultJungleTree(string name, TreeContext tc, string uid, ChangeListWriter writer, TreeEditor edit) { + this.TreeName = name; + this.Repository = new AtomicReference<TreeContext>(tc); + this.Uuid = uid; + this.Writer = writer; + this.Editor = edit; + } + + public JungleTreeEditor getTreeEditor() { + TreeContext tc = Repository.Get(); + NetworkTransactionManager txManager = new NetworkTransactionManager(this.TreeName, this.Writer, tc, this.Repository, this.Uuid); + TreeNode root = tc.getRoot(); + return new NetworkDefaultJungleTreeEditor(this.TreeName, root, txManager, this.Editor); + } + + public JungleTreeEditor getLocalTreeEditor () { + TreeContext tc = this.Repository.Get(); + NetworkTransactionManager txManager = new NetworkTransactionManager(this.TreeName, this.Writer, tc, this.Repository, this.Uuid); + TreeNode root = tc.getRoot(); + return NetworkDefaultJungleTreeEditor.NewLocalTreeEditor(this.TreeName, root, txManager, this.Editor); + } + + public TreeNode getRootNode () { + TreeContext tc = this.Repository.Get(); + return tc.getRoot(); + } + + public long revision () { + return 0; + } + + public Either<Error, JungleTree> getOldTree (long rev) { + TreeContext tc = this.Repository.Get(); + while(tc.getRevision() != rev) { // If I mistake this code, change this code. + tc = tc.prev(); + if (tc == null) { + return DefaultEither<Error, JungleTree>.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); + } + } + string oldTreeUuid = this.Uuid + revision().ToString(); + JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, this.Writer, this.Editor); + return DefaultEither<Error, JungleTree>.newB(oldTree); + } + + public TreeMap<string, TreeMap<string, List<TreeNode>>> getIndex () { + TreeContext tc = this.Repository.Get(); + return tc.getIndex(); + } + +// public InterfaceTraverser getTraverser (bool useIndex) { +// TreeMap<string, TreeMap<string, List<TreeNode>>> index = getIndex(); +// } + + public Either<Error, TreeNode> getNodeOfPath (NodePath path) { + TreeNode node = this.Repository.Get().getRoot(); + foreach(var num in path) { + if (num == -1) { + continue; + } + Either<Error, TreeNode> either = node.getChildren().at(num); + if (either.isA()){ + return either; + } + node = either.b(); + } + return DefaultEither<Error, TreeNode>.newB(node); + } + + public void setBufferSize (int num) { + + } +}