changeset 7:02b2ab7bffe6

fix
author Kazuma
date Tue, 27 Sep 2016 18:36:05 +0900
parents 0428c8888abf
children d132d442dc34
files src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungle.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungleTree.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/JungleTreeEditor.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/Attributes.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/DefaultNode.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/List.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/EmptyNode.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/TreeMap.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultNodePath.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultTreeEditor.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/TreeNodeAttributes.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/DefaultTreeOperationLog.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/LoggingAttributes.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/AppendChildAtOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteAttributeOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteChildAtOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/NodeOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/PutAttributeOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/ReplaceRootNodeOperation.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/transformer/PutAttribute.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultJungleTreeEditor.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTransactionManager.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNode.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeAttribute.cs src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeChildren.cs src/test/csharp/DefaultJungleTreeTest.cs src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/list/deleteTest.cs src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/list/replaceTest.cs src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapDelete.cs src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapTest.cs src/test/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/nodeeditor/PutAttributeTest.cs
diffstat 32 files changed, 168 insertions(+), 166 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungle.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungle.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -5,7 +5,7 @@
 
 public class DefaultJungle : Jungle {
 	private Journal journal;
-	private Dictionary<string, JungleTree> trees;
+	private TreeMap <string, JungleTree> trees;
 	private string uuid;
 	private TreeEditor editor;
 
@@ -25,37 +25,35 @@
 
 	public DefaultJungle(Journal journal, string uuid, TreeEditor editor){
 		this.journal = new NullJournal();
-		this.trees = new Dictionary <string, JungleTree>();
+		this.trees = new TreeMap <string, JungleTree>();
 		this.uuid = uuid;
 		this.editor = editor;
 	}
 
-
 	public JungleTree getTreeByName(string name) {
 		
-		JungleTree j = trees[name];
-		if (j != null) {
-			return trees [name];
+		JungleTree jungle_tree = trees.get(name);
+		if (jungle_tree != null) {
+			return jungle_tree;
 		} else {
+			Debug.Log ("そのTreeは無いようですね。");
 			return null;
 		}
 	}
 
 	public JungleTree createNewTree(string name) {
 		ChangeList list = new InnerChangeList(uuid,name);
-		// Debug.Log( list.getTreeName ());
-
 		DefaultTreeNode root = new DefaultTreeNode ();
 		InterfaceTraverser traverser = new InterfaceTraverser (root, true);
 		TreeContext tc = new DefaultTreeContext (root, null, list, uuid, name, 0, traverser);
 		JungleTree newTree = new DefaultJungleTree (tc, uuid, journal.getWriter (), editor);
-		trees.Add (name, newTree);
-		// Trees.getValue => nullの時 ここはどう書けば?
-//		if (trees.TryGetValue (name, newTree) != null) {
-//			return null;
-//		}
+		if (newTree != null) {
+			trees = trees.put (name, newTree);
+		} else {
+			Debug.Log ("こんばんは、nullです。");
+		}
 		return newTree;
-	}
+	} 
 
 	public class InnerChangeList : ChangeList {
 
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungleTree.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/DefaultJungleTree.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,11 +1,8 @@
-using UnityEngine;
-using System.Collections;
-using System;
-using System.Threading;
+
 
 
 public class DefaultJungleTree : JungleTree {
-	//atomic reference undefine c#.
+
 	private AtomicReference<TreeContext> repository;
 	private string uuid;
 	private ChangeListWriter writer;
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/JungleTreeEditor.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/JungleTreeEditor.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,8 +1,8 @@
-using UnityEngine;
+
 public interface JungleTreeEditor {
 	Either<Error,JungleTreeEditor> addNewChildAt(NodePath path,int pos);
 	Either<Error,JungleTreeEditor> deleteChildAt(NodePath path,int pos);
-	Either<Error,JungleTreeEditor> putAttribute(NodePath path,string key, GameObject value);
+	Either<Error,JungleTreeEditor> putAttribute(NodePath path,string key, byte[] value);
 	Either<Error,JungleTreeEditor> deleteAttribute(NodePath path,string key);
 	Either<Error, JungleTreeEditor> replaceNewRootNode();
 	Either<Error,JungleTreeEditor> edit(NodePath path,NodeEditor editor);
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/Attributes.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/Attributes.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,5 +1,5 @@
 using UnityEngine;
 public interface Attributes{
-	GameObject get (string key);
+	byte[] get (string key);
 	string getString (string key);
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/DefaultNode.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/DefaultNode.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -12,13 +12,6 @@
 		this.next = next;
 	}
 
-//    public DefaultNode(Node<T> attribute1, TailNode<T> tailNode)
-//    {
-//        this.attribute1 = attribute1;
-//        this.tailNode = tailNode;
-//    }
-
-
     public Node<T> getNext() {
 		return next;
 	}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/List.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/list/List.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -56,8 +56,9 @@
 	public IEnumerator<T> iterator() {
 		Node<T> currentNode = head.getNext();
 		while (currentNode.getAttribute() != null) {
+			Debug.Log (currentNode.getAttribute ().ToString());
 			yield return (T)currentNode.getAttribute();
-			currentNode = currentNode.getNext();
+			currentNode = currentNode.getNext ();
 		}
 	}
 
@@ -109,17 +110,9 @@
 	}
 
 	public string toString() {
-		string pathString = "<";
 		//IEnumerator<T> iterator = reverseIterator();
-		while (true) {
-//			pathString += iterator.next();
-//			if (iterator.hasNext())
-//				pathString += ",";
-//			else
-//				break;
-		}
-		pathString += ">";
-		return pathString;
+		// pathString += ">";
+		return "toString";
 	}
 
 	public List<T> append(List<T> list) {
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/EmptyNode.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/EmptyNode.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -28,7 +28,7 @@
 		return false;
 	}
 
-	public override TreeMapNode<K,V> createNode(K k,V value,TreeMapNode<K,V> left, TreeMapNode<K,V> right){
+	public override TreeMapNode<K,V> createNode(K key,V value,TreeMapNode<K,V> left, TreeMapNode<K,V> right){
 		return new RedNode<K,V> (key, value, new EmptyNode<K,V> (), new EmptyNode<K,V> ());
 	}
 
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/TreeMap.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/data/treemap/TreeMap.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -50,7 +50,7 @@
 	}
 
 	public TreeMap<K, V> delete(K key) {
-		if (key == null) {
+		if (key.Equals(default(K))) {
 			return this;
 		}
 		rebuildNode<K, V> rootRebuildNode = root.delete (key, null, this.comparator, Rotate.N);
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultNodePath.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultNodePath.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -5,9 +5,6 @@
 public class DefaultNodePath : NodePath {
 	private List<int> path = new List<int>();
 
-	int[] _array;
-	int Count;
-
 	IEnumerator IEnumerable.GetEnumerator()
 	{
 		// call the generic version of the method
@@ -16,16 +13,7 @@
 
 	public IEnumerator<int> GetEnumerator()
 	{
-		for (int i = 0; i < Count; i++)
-			yield return _array[i];
-	}
-
-
-
-	public void Start() {
-		NodePath p = new DefaultNodePath();
-		p = p.add(1).add(2).add(3).add(4);
-		Debug.Log (p.ToString ());
+		return path.iterator ();
 	}
 
 	public DefaultNodePath() {
@@ -36,10 +24,13 @@
 		this.path = path;
 	}
 
-
-//	public IEnumerator<int> iterator() {
-//		return path.iterator();
-//	}
+	/// <summary>
+	/// Listに追加します。
+	/// path = path.add(0)を2回する
+	/// path = path.add(0).add(0)する
+	/// これは同じ
+	/// </summary>
+	/// <param name="pos">Position.</param>
 
 	public NodePath add(int pos) {
 		List<int> newPath = path.addLast(pos);
@@ -58,7 +49,7 @@
 		return new Pair<int, NodePath>(last, new DefaultNodePath(list));
 	}
 
-	public string toString() {
+	public override string ToString() {
 		return path.toString();
 	}
 
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultTreeEditor.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/DefaultTreeEditor.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -21,10 +21,6 @@
 	private Either<Error, LoggingNode> clone(Traversal t, NodeEditor editor){
 		List<Direction<TreeNode>> path = new List<Direction<TreeNode>> ();
 
-		//while(a.MoveNext()) {
-		//	Debug.Log ("value = " + a.Current);
-		//}
-
 		foreach (Direction<TreeNode> direction in t) {
 			path = path.addLast (direction);
 		}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/TreeNodeAttributes.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/TreeNodeAttributes.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,8 +1,8 @@
 using System.Collections.Generic;
 using UnityEngine;
 public interface TreeNodeAttributes : Attributes {
-	Either<Error,TreeNode> delete(string key);
-	Either<Error,TreeNode> put(string key, GameObject value);
-	TreeMap<string,GameObject> getAttributesAsRawMap();
+	Either<Error, TreeNode> delete(string key);
+	Either<Error, TreeNode> put(string key, byte[] value);
+	TreeMap<string, byte[]> getAttributesAsRawMap();
 	IEnumerator<string> getKeys();
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/DefaultTreeOperationLog.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/DefaultTreeOperationLog.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -9,9 +9,6 @@
 	private IEnumerable<TreeOperation> list;
 	private int size;
 
-	TreeOperation[] _array;
-	TreeOperation Count;
-
 	IEnumerator IEnumerable.GetEnumerator()
 	{
 		// call the generic version of the method
@@ -20,8 +17,9 @@
 
 	public IEnumerator<TreeOperation> GetEnumerator()
 	{
-		for (int i = 0; i < Convert.ToInt32(Count); i++)
-			yield return _array[i];
+		foreach (var i in list) {
+			yield return i;
+		}
 	}
 
 
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/LoggingAttributes.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/impl/logger/LoggingAttributes.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -11,7 +11,7 @@
 		log = _log;
 	}	
 
-	public GameObject get(string _key)
+	public byte[] get(string _key)
 	{
 		TreeNodeAttributes attributes = wrap.getAttributes();
 		return attributes.get(_key);
@@ -39,7 +39,7 @@
 		return edit(deleteAttribute);
 	}
 
-	public Either<Error,LoggingNode> put(string _key, GameObject _value)
+	public Either<Error,LoggingNode> put(string _key, byte[] _value)
 	{
 		PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value);
 		return edit(putAttribute);
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/AppendChildAtOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/AppendChildAtOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -30,9 +30,9 @@
 		return null;
 	}
 
-	public GameObject getValue()
+	public byte[] getValue()
 	{
-		return null;
+		return new byte[1]{0};
 	}
 
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteAttributeOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteAttributeOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -25,8 +25,8 @@
 		return key;
 	}
 
-	public GameObject getValue() {
-		return null;
+	public byte[] getValue() {
+		return new byte[1]{0};
 	}
 
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteChildAtOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/DeleteChildAtOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -31,9 +31,9 @@
 		return null;
 	}
 
-	public GameObject getValue()
+	public byte[] getValue()
 	{
-		return null;
+		return new byte[1]{0};
 	}
 
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/NodeOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/NodeOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -4,5 +4,5 @@
 	Either<Error,TreeNode> invoke (TreeNode _target);
 	int getPosition();
 	string getKey();
-	GameObject getValue();
+	byte[] getValue();
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/PutAttributeOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/PutAttributeOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -2,9 +2,9 @@
 
 public class PutAttributeOperation : NodeOperation {
 	private string key;
-	private GameObject value;
+	private byte[] value;
 
-	public PutAttributeOperation(string _key,GameObject _value)
+	public PutAttributeOperation(string _key, byte[] _value)
 	{
 		key = _key;
 		value = _value;
@@ -30,7 +30,7 @@
 		return key;
 	}
 
-	public GameObject getValue()
+	public byte[] getValue()
 	{
 		return value;
 	}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/ReplaceRootNodeOperation.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/operations/ReplaceRootNodeOperation.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -20,8 +20,8 @@
 		return null;
 	}
 
-	public GameObject getValue() {
-		return null;
+	public byte[] getValue() {
+		return new byte[1]{0};
 	}
 
 }
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/transformer/PutAttribute.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/store/transformer/PutAttribute.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -3,9 +3,9 @@
 
 public class PutAttribute : NodeEditor {
 	private string key;
-	private GameObject value;
+	private byte[] value;
 
-	public PutAttribute(string _key,GameObject _value)
+	public PutAttribute(string _key, byte[] _value)
 	{
 		key = _key;
 		value = _value;
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -2,27 +2,17 @@
 
 public class AtomicReference <T> where T : class {
 	private T value;
-	private bool isSet = false;
-
-	public AtomicReference() { }
 
 	public AtomicReference(T value) {
 		this.value = value;
 	}
 
-	public T CompareAndSet(T newValue) {
+	public bool CompareAndSet(T newValue, T prevValue) {
 		// change to compere exchange.
-		isSet = true;
-		return Interlocked.CompareExchange(ref value, value, newValue);
+		T oldValue = value;
+		return (oldValue != Interlocked.CompareExchange (ref value, newValue, prevValue));
 	}
-
-	public bool OptimicSet(T oldvalue) {
-		T old;
-		do {
-			old = value;
-		} while (old != CompareAndSet (value));
-		return isSet;
-	}
+		
 
 	public T Get() {
 		return value;
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultJungleTreeEditor.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultJungleTreeEditor.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -15,12 +15,12 @@
 
 
 
-	public DefaultJungleTreeEditor(TreeNode newNode,TransactionManager _txManager,TreeEditor _editor,TreeOperationLog _log)
+	public DefaultJungleTreeEditor(TreeNode newNode,TransactionManager txManager,TreeEditor editor,TreeOperationLog log)
 	{
 		this.root = newNode;
-		this.txManager = _txManager;
-		this.editor = _editor;
-		this.log = _log;
+		this.txManager = txManager;
+		this.editor = editor;
+		this.log = log;
 	}
 
 
@@ -36,7 +36,6 @@
 		OperationLog newLog = newLogging.getOperationLog ();
 		TreeNode newNode = newLogging.getWrap ();
 
-		// 無名クラスが書けてない
 		IterableConverter<TreeOperation,NodeOperation>.Converter<TreeOperation, NodeOperation> converter = new InnerConverter (_path);
 			
 
@@ -65,7 +64,7 @@
 		return _edit(_path,deleteChildAt);
 	}
 
-	public Either<Error, JungleTreeEditor> putAttribute(NodePath _path, string _key, GameObject _value) {
+	public Either<Error, JungleTreeEditor> putAttribute(NodePath _path, string _key, byte[] _value) {
 		PutAttribute putAttribute = new PutAttribute (_key, _value);
 		return _edit (_path, putAttribute);
 	}
@@ -79,14 +78,19 @@
 		return _edit(_path,_editor);
 	}
 
+	/// <summary>
+	/// Treeを変更したあとSuccess(push)を行う
+	/// </summary>
+
 	public Either<Error,JungleTreeEditor> success() {
-		Either<Error,TransactionManager> either = txManager.commit(root,log);
+		Either<Error,TransactionManager> either = this.txManager.commit(this.root, this.log);
+		// このlogをサーバにpushする?
 		if(either.isA()){
 			return DefaultEither<Error, JungleTreeEditor>.newA(either.a());
 		}
 
 		TransactionManager newTxManager = either.b();
-		JungleTreeEditor newTreeEditor = new DefaultJungleTreeEditor(root,newTxManager,editor);
+		JungleTreeEditor newTreeEditor = new DefaultJungleTreeEditor(this.root, newTxManager, this.editor);
 
 		return DefaultEither<Error, JungleTreeEditor>.newB(newTreeEditor);
 	}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTransactionManager.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTransactionManager.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -28,7 +28,7 @@
 		// traverser.createIndex();
 		TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,traverser);
 		// compare and setがどういう役割か?Javaで
-		if  (repository.OptimicSet(newTreeContext)) { // CompareAndSetが成功した場合に処理を実行
+		if  (repository.CompareAndSet(newTreeContext, newTreeContext.prev())) { // CompareAndSetが成功した場合に処理を実行
 			TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid);
 			return DefaultEither<Error, TransactionManager>.newB(txManager);
 		}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNode.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNode.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,17 +1,17 @@
 using UnityEngine;
 public class DefaultTreeNode : TreeNode {
 	private List<TreeNode> children;
-	private TreeMap<string,GameObject> attrs;
+	private TreeMap<string,byte[]> attrs;
 	// string nodeId = new VMID().toString();
 
-	private static List<TreeNode> NIL_LIST = new List<TreeNode>();
+	private static readonly List<TreeNode> NIL_LIST = new List<TreeNode>();
 
 	public DefaultTreeNode() 
-		: this (NIL_LIST, new TreeMap<string,GameObject> ())
+		: this (NIL_LIST, new TreeMap<string,byte[]> ())
 	{
 	}
 
-	public DefaultTreeNode(List<TreeNode> _children, TreeMap<string, GameObject> _attrs) {
+	public DefaultTreeNode(List<TreeNode> _children, TreeMap<string, byte[]> _attrs) {
 		attrs = _attrs;
 		children = _children;
 	}
@@ -33,7 +33,7 @@
 	}
 
 	public Either<Error, TreeNode> appendRootNode() {
-		TreeNodeChildren newRootChildren = new DefaultTreeNodeChildren(NIL_LIST, new TreeMap<string,GameObject>());
+		TreeNodeChildren newRootChildren = new DefaultTreeNodeChildren(NIL_LIST, new TreeMap<string, byte[]>());
 		Either<Error, TreeNode> either = newRootChildren.addNewChildAt(0,this);
 		return either;
 	}
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeAttribute.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeAttribute.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -6,14 +6,14 @@
 
 public class DefaultTreeNodeAttribute : TreeNodeAttributes {
 	public List<TreeNode> children;
-	public TreeMap<string,GameObject> attrs;
+	public TreeMap<string, byte[]> attrs;
 
-	public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<string,GameObject> _attrs){
+	public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<string, byte[]> _attrs){
 		children = _children; // null?
 		attrs = _attrs;
 	}
 
-	public TreeMap<string, GameObject> getAttributesAsRawMap(){
+	public TreeMap<string, byte[]> getAttributesAsRawMap(){
 		return attrs;
 	}
 
@@ -26,35 +26,35 @@
 			return DefaultEither<Error,TreeNode>.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
 		}
 
-		TreeMap<string, GameObject> newMap = attrs.delete(_key);
+		TreeMap<string, byte[]> newMap = attrs.delete(_key);
 		TreeNode newNode = new DefaultTreeNode(children, newMap);
 		return DefaultEither<Error,TreeNode>.newB(newNode);
 	}
 
-	public Either<Error, TreeNode> put(string _key, GameObject _value){
+	public Either<Error, TreeNode> put(string _key, byte[] _value){
 		if (_key == null || _value == null) {
 			return DefaultEither<Error, TreeNode>.newA (NodeEditorError.NULL_VALUE_NOT_ALLOWED);
 		}
 
-		TreeMap<string, GameObject> newMap = attrs.put (_key, _value);
+		TreeMap<string, byte[]> newMap = attrs.put (_key, _value);
 
 		TreeNode newNode = new DefaultTreeNode (children, newMap);
 
 		return DefaultEither<Error, TreeNode>.newB (newNode);
 	}
 
-	public GameObject get(string _key) {
+	public byte[] get(string _key) {
 		if (_key == null) {
-			return null;
+			return new byte[1]{0};
 		}
-		GameObject op = attrs.get(_key); //null
+		byte[] op = attrs.get(_key); //null
 		if (op != null) {
-			return op.gameObject;
+			return op;
 		}
-		return null;
+		return new byte[1]{0};
 	}
 
-	public string getString(string key , Encoding enc) {
+	public string getString(string key, Encoding enc) {
 		char[] attribute = key.ToCharArray();
 		if (attribute != null){
 			return new string(attribute);
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeChildren.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTreeNodeChildren.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -4,9 +4,9 @@
 public class DefaultTreeNodeChildren : TreeNodeChildren {
 
 	public List<TreeNode> children;
-	public TreeMap<string, GameObject> attrs;
+	public TreeMap<string, byte[]> attrs;
 
-	public DefaultTreeNodeChildren(List<TreeNode> _children, TreeMap<string, GameObject> _attrs){
+	public DefaultTreeNodeChildren(List<TreeNode> _children, TreeMap<string, byte[]> _attrs){
 		children = _children;
 		attrs = _attrs;
 	}
--- a/src/test/csharp/DefaultJungleTreeTest.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/test/csharp/DefaultJungleTreeTest.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,43 +1,49 @@
 using UnityEngine;
-using System.Collections;
 using System;
 //using System.Diagnostics;
 
-public class DefaultJungleTreeTest : MonoBehaviour { // apiの仕様的にこんな感じ
-
+public class DefaultJungleTreeTest : MonoBehaviour {
+	// apiの仕様的にこんな感じ
+	private readonly int COUNT = 500;
 	public Jungle instance() {
 		Jungle j = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));  // hogeというtreeを作る
 		return j;
 	}
 
-	public static string key = "KEY";
-	public GameObject value;
+	public string key = "moumou";
+	private byte[] value = BitConverter.GetBytes(10);
 
-	void Start() {
-		Jungle j = instance ();
-		JungleTree tree = j.createNewTree ("tree"); // hogeの中にtreeという名前の木を作る
+	public void Insert () {
+		Jungle j = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
+		JungleTree t = j.createNewTree("tree");
 
-		JungleTreeEditor editor1 = tree.getTreeEditor (); // editor
+		JungleTreeEditor editor1 = t.getTreeEditor();
 
-		DefaultNodePath path = new DefaultNodePath ();
-		// NodePath path;
+		DefaultNodePath root = new DefaultNodePath();
+
+		float check_time = Time.realtimeSinceStartup;
 
-		Either<Error, JungleTreeEditor> either = editor1.putAttribute (path, key, value);
-		if (either.isA ()) { // 失敗した場合のコード
-			Debug.Log ("失敗しました。");
-		}
-		editor1 = either.b (); //成功した場合
-		editor1.success (); // 大本にあるTreeにここで変更を加える
+		for(int i = 0; i < COUNT; i++) { 
+			Either<Error, JungleTreeEditor> either = editor1.putAttribute(root, i.ToString(), value);
+			if (either.isA()) {
+				Debug.Log("失敗しました。");
+			}
+			editor1 = either.b ();
 
-		TreeNode node = tree.getRootNode ();
-		Debug.Log (node);
-		Debug.Log (node.getAttributes ().getKeys ());
-		GameObject v = node.getAttributes ().get (key);
-		Debug.Log (v);
-		
+			Either<Error, JungleTreeEditor> r = editor1.success();
+			if (!r.isA()) {
+				Debug.Log("失敗しました。");
+			}
+			r.b();
+		}
+		check_time = Time.realtimeSinceStartup - check_time;
+		print ("処理時間 : " + check_time);
+
+		TreeNode node = t.getRootNode();
+		for (int i = 0; i < COUNT; i++) {
+			byte[] v = node.getAttributes ().get (i.ToString());
+			print (BitConverter.ToInt32 (v, 0));
+		}
 	}
 
-	void Update() {
-
-	}
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/list/deleteTest.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -0,0 +1,16 @@
+using UnityEngine;
+using System.Collections;
+
+public class deleteTest : MonoBehaviour {
+
+	void Start () {
+		List<int> list = new List<int>();
+
+		for(int count = 0; count < 10; count++){
+			list = list.addLast(count);
+		}
+		List<int> newList = list.delete(5);
+		Debug.Log(list.getHead().length());
+		Debug.Log (newList.getHead ().length ());
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/list/replaceTest.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -0,0 +1,18 @@
+using UnityEngine;
+
+public class replaceTest : MonoBehaviour {
+
+	// Use this for initialization
+	void Start () {
+		List<int> list = new List<int> ();
+		for (int count = 0; count < 10; count++) {
+			list = list.addLast (count);
+            Debug.Log("list" + list.tail());
+		}
+		List<int> newList = list.replace (5, 15);
+		int attribute = list.index (5);
+		Debug.Log (attribute);
+		attribute = newList.index (5);
+		Debug.Log (attribute);
+	}
+}
--- a/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapDelete.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapDelete.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -1,5 +1,4 @@
 using UnityEngine;
-using System.Collections;
 
 public class TreeMapDelete : MonoBehaviour {
 
@@ -7,20 +6,18 @@
 	void Start () {
 		TreeMap<int,int> map = new TreeMap<int, int> ();
 		for (int count = 1; count < 6; count++) {
-			Debug.Log (count);
 			map = map.put (count, count);
-			int val = map.get(count);
-			//Debug.Log ("value : " + val);
 			map.checkDepth ();
 		}
 
 		// ただ消すための数字をここに入れているだけ
-		List<int> list = new List<int>(5);
-		for (int i = 1; i < 5; i++) {
-			list.addLast (i);
+		List<int> list = new List<int>();
+		for (int count = 1; count < 6; count++) {
+			list = list.addLast (count);
 		}
 
 		foreach(int num in list){
+            Debug.Log(num);
 			map = map.delete(num);
 			map.checkDepth();
 		}
--- a/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapTest.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/test/csharp/jp.ac.u-ryukyu.ie.cr/data/treemap/TreeMapTest.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -24,7 +24,12 @@
 //			  if (checknull){
 //				Debug.Log(map.get());
 //		}
-
+        for(int count = 5; count > -10; count--){
+            int op = map.get(count);
+            if(op != null) {
+				Debug.Log("op " + op);
+			}
+        }
 		Debug.Log ("end");
 	
 	}
--- a/src/test/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/nodeeditor/PutAttributeTest.cs	Tue Jul 05 07:20:41 2016 +0900
+++ b/src/test/csharp/jp.ac.u-ryukyu.ie.cr/jungle/core/nodeeditor/PutAttributeTest.cs	Tue Sep 27 18:36:05 2016 +0900
@@ -4,7 +4,7 @@
 public class PutAttributeTest : MonoBehaviour {
 
 	string key = "hoge";
-	public GameObject value;
+	public byte[] value;
 
 	// Use this for initialization
 	void Start () {
@@ -17,7 +17,7 @@
 		}
 		LoggingNode newnode = either.b ();
 		Debug.Log (newnode);
-		GameObject ret = newnode.getAttributes ().get (key);
+		byte[] ret = newnode.getAttributes ().get (key);
 		Debug.Log ("insertしたものは" + ret);
 	}