diff src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-network/transaction/NetworkDefaultJungleTree.cs @ 17:01a08cf4b2d9

Liq Files
author Kazuma
date Mon, 07 Nov 2016 01:05:24 +0900
parents
children
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	Mon Nov 07 01:05:24 2016 +0900
@@ -0,0 +1,79 @@
+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 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) {
+
+	}
+}