# HG changeset patch # User Kazuma Takeda # Date 1481809968 -32400 # Node ID 1f99e150f336fadff1ab76959caad2680437d74c # Parent 0865819106cf89c457faf27ee8d57c17b48b21d2 fix folder and add Object Mapper. diff -r 0865819106cf -r 1f99e150f336 .DS_Store Binary file .DS_Store has changed diff -r 0865819106cf -r 1f99e150f336 Main.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 72add325a6b777445b640803bc458291 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/ObjectMapper.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/ObjectMapper.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a1b0a053a92e54759a8c77c8f3cc86f7 +folderAsset: yes +timeCreated: 1481524195 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/ObjectMapper/ConvertObject.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/ObjectMapper/ConvertObject.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,28 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Runtime.Serialization.Formatters.Binary; +using System.Runtime.Serialization; +using System.IO; +[Serializable] +public class ConvertObject : MonoBehaviour { + + public static byte[] Convert (object target) { + IFormatter formatter = new BinaryFormatter(); + MemoryStream ms = new MemoryStream(); + formatter.Serialize(ms, target); + byte[] myByteArray = ms.ToArray(); + return myByteArray; + } + + public static object UnConvert(byte[] target) { + using (var memStream = new MemoryStream()) + { + var binForm = new BinaryFormatter(); + memStream.Write(target, 0, target.Length); + memStream.Seek(0, SeekOrigin.Begin); + var obj = binForm.Deserialize(memStream); + return obj; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/ObjectMapper/ConvertObject.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/ObjectMapper/ConvertObject.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93eca2cf0788247b7b77b054c193bf8c +timeCreated: 1481614756 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/ObjectMapper/SceneNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/ObjectMapper/SceneNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; +namespace JungleDB { + [Serializable] + public class SceneNode { + + public GameObject obj; + public string Name; + + public SceneNode m_parent; + + [SerializeField] + public System.Collections.Generic.List m_childs; + + public SceneNode(GameObject obj, SceneNode parent=null){ + this.obj = obj; + this.Name = obj.name; + m_parent = parent; + m_childs = new System.Collections.Generic.List(); + } + + public void OnAdded () {} + + public void OnRemoved () {} + + public bool AddChild (SceneNode toAdd){ + toAdd.m_parent = this; + m_childs.Add(toAdd); + toAdd.OnAdded(); + return true; + } + + public bool RemoveChild (SceneNode toRemove) { + toRemove.OnRemoved(); + return m_childs.Remove(toRemove); + } + + public void RemoveAllChildren () { + int childcount = m_childs.Count; + for(int i = 0; i < childcount ;++i){ + m_childs[i].RemoveAllChildren(); + } + + for(int i = 0; i < childcount ;++i){ + m_childs[i].OnRemoved(); + } + m_childs.Clear(); + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/ObjectMapper/SceneNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/ObjectMapper/SceneNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea5236c11274b49dcab44a3320be44cf +timeCreated: 1481524197 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 68c016a1f8eea894f9a4ce7aa2f8e1b4 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/DefaultJungle.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/DefaultJungle.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,99 @@ +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace JungleDB { + public class DefaultJungle : Jungle { + private Journal journal; + private TreeMap trees; + private string uuid; + private TreeEditor editor; + + public void Start(){ + DefaultJungle j = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser())); + JungleTree t = j.createNewTree ("fuga"); + + JungleTreeEditor e1 = t.getTreeEditor (); + + DefaultNodePath root = new DefaultNodePath (); + Either either = e1.addNewChildAt (root, 0); + e1 = either.b(); + either = e1.addNewChildAt (root.add (0), 0); + e1 = either.b (); + e1.commit (); + } + + public DefaultJungle(Journal journal, string uuid, TreeEditor editor){ + this.journal = new NullJournal(); + this.trees = new TreeMap (); + this.uuid = uuid; + this.editor = editor; + } + + public JungleTree getTreeByName(string 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); + 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); + if (newTree != null) { + trees = trees.put (name, newTree); + } else { + Debug.Log ("こんばんは、nullです。"); + } + return newTree; + } + + public class InnerChangeList : ChangeList { + + string uuid; + string name; + + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + // construct + public InnerChangeList(string _uuid, string _name) { + this.uuid = _uuid; + this.name = _name; + } + + public IEnumerator iterator() { + List nil = new List(); + return nil.iterator(); + } + + public string uuids() { + return uuid; + } + + public string getTreeName() { + return name; + } + + public TreeOperationLog getLog() { + return new DefaultTreeOperationLog(); + } + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/DefaultJungle.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/DefaultJungle.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d4ad0a7a3b73ef44ac8e7637b768198 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/DefaultJungleTree.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/DefaultJungleTree.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,83 @@ + + +namespace JungleDB { +public class DefaultJungleTree : JungleTree { + + private AtomicReference repository; + private string uuid; + private ChangeListWriter writer; + private TreeEditor treeEditor; + + + public DefaultJungleTree(TreeContext tc, string uuid, ChangeListWriter writer, TreeEditor editor) { + this.repository = new AtomicReference(tc); + this.uuid = uuid; + this.writer = writer; + this.treeEditor = editor; + } + + public JungleTreeEditor getTreeEditor() { + TreeContext tc = repository.Get (); + DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); + TreeNode root = tc.getRoot(); + return new DefaultJungleTreeEditor(root, txManager, treeEditor); + } + + public JungleTreeEditor getLocalTreeEditor() { + return getTreeEditor (); + } + + public TreeNode getRootNode() { + TreeContext tc = repository.Get(); + return tc.getRoot(); // default jungle innner change list? + } + + public InterfaceTraverser getTraverser(bool useIndex) { + TreeContext tc = repository.Get(); + return tc.getTraverser(); + } + + public TreeMap>> getIndex() { + TreeContext tc = repository.Get(); + return tc.getIndex(); + } + + public long revision() { + TreeContext tc = repository.Get(); // 確かにnull どこから来てる? repositoryのインスタンスを生成してないからかも + return tc.getRevision(); + } + + public Either getOldTree(long revision) { + TreeContext tc = repository.Get(); + + for (; tc.getRevision() != revision; ) { + tc = tc.prev(); + if (tc == null) + return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); + } + + + string oldTreeUuid = uuid + revision; + JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, writer, treeEditor); + return DefaultEither.newB(oldTree); + } + + public Either getNodeOfPath(NodePath path) { //eitherはどちらのインターフェースをつかうか、みたいな + TreeNode node = repository.Get().getRoot(); + foreach (int num in path) { + if (num == -1) + continue; + Either either = node.getChildren().at(num); + if (either.isA()) + return either; + node = either.b(); + } + return DefaultEither.newB(node); + } + + public void setBufferSize(int _bufferSize) { + // not use + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/DefaultJungleTree.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/DefaultJungleTree.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef5c75a2b183ac043b339706e77f4ab1 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/Jungle.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/Jungle.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface Jungle { + JungleTree getTreeByName (string name); + JungleTree createNewTree (string name); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/Jungle.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/Jungle.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 477efe01bb26a5445bc957fae6418723 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/JungleTree.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/JungleTree.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,23 @@ + +namespace JungleDB { + public interface JungleTree { + + JungleTreeEditor getTreeEditor(); + + JungleTreeEditor getLocalTreeEditor(); + + TreeNode getRootNode(); + + long revision(); + + Either getOldTree(long revision); + + TreeMap>> getIndex(); + + // InterfaceTraverser getTraverser(bool useIndex); + + Either getNodeOfPath(NodePath path); + + void setBufferSize(int _bufferSize); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/JungleTree.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/JungleTree.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0edc6411130c4be428af3c34bd5006c9 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/JungleTreeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/JungleTreeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,14 @@ + +namespace JungleDB { + public interface JungleTreeEditor { + Either addNewChildAt(NodePath path,int pos); + Either deleteChildAt(NodePath path,int pos); + Either putAttribute(NodePath path,string key, byte[] value); + Either deleteAttribute(NodePath path,string key); + Either replaceNewRootNode(); + Either edit(NodePath path,NodeEditor editor); + Either commit(); + Either flushSuccess(); + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/JungleTreeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/JungleTreeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a83a7c1a691005f4dbabccd68a45824b +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/core.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/core.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cd10cbf6cc1b9b1449970908d387aada +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/core/Attributes.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/core/Attributes.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ +using UnityEngine; +public interface Attributes{ + byte[] get (string key); + string getString (string key); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/core/Attributes.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/core/Attributes.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8b5f9c6f5264df34d9c713a438baaa51 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/core/Children.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/core/Children.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,6 @@ +namespace JungleDB { + public interface Children { + Either at (int pos); + int size(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/core/Children.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/core/Children.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e530765d6685158459e40a12f0de9775 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f986c647ab8f3d944bf09692d3e8cd86 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c03c69b8360fbcc42a0ec4a1ee50346e +folderAsset: yes +timeCreated: 1477164410 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/DefaultNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/DefaultNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; +using System; + +public class DefaultNode : Node { + private readonly T attribute; + private readonly Node next; + //private TailNode tailNode; + + public DefaultNode(T attribute, Node next) { + this.attribute = attribute; + this.next = next; + } + + public Node getNext() { + return next; + } + + public T getAttribute() { + return attribute; + } + + public Node addLast(T attribute) { + Node node = next.addLast(attribute); + return new DefaultNode(this.attribute, node); + } + + public Node add(int currentNum, int num, T attribute) { + if (currentNum == num) { + Node newNode = new DefaultNode(attribute, this.next); + return new DefaultNode(this.attribute, newNode); + } + + Node newNodes = next.add(currentNum + 1, num, attribute); + if (newNodes == null) + return null; + + return new DefaultNode(this.attribute, newNodes); + } + + public Node delete(int currentNum, int deleteNum) { + if (currentNum == deleteNum) { + return new DefaultNode (this.attribute, this.next.getNext ()); + } + + Node newNode = next.delete (currentNum + 1, deleteNum); + if (newNode == null) { + return null; + } + return new DefaultNode(this.attribute, newNode); + } + + public Node replaceNode(int currentNum, int num, T attribute) { + if (currentNum == num) { + return new DefaultNode(attribute, this.getNext()); + } + + Node newNode = next.replaceNode(currentNum + 1, num, attribute); + if (newNode == null) { + return null; + } + return new DefaultNode(this.attribute, newNode); + } + + + public int length() { + return next.length() + 1; + } + + public T getAttribure() + { + throw new NotImplementedException(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/DefaultNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/DefaultNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93a130acd316c9d458e9f92b5994e556 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/List.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/List.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,121 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +public class List : IEnumerable { + private readonly Node head; + + public List() { + this.head = new headNode(); + } + + // T...はC#だとparamsらしい 可変引数型というみたいだ + public List(params T[] attributes) { + List list = new List (); + foreach (T attribute_local in attributes) { + list = list.addLast (attribute_local); + } + } + + private List(Node head) { + this.head = head; + } + + public Node getHead() { + return head; + } + + public List add(int num, T attribute) { + Node newHead = head.add(0, num, attribute); + if (newHead == null) + return this; + return new List(newHead); + } + + public List addLast(T attribute) { + Node newHead = head.addLast(attribute); + return new List(newHead); + } + + + public T index(int num) { + int count = 0; + Node currentNode = head.getNext(); + while (currentNode != null) { + if (count == num) { + return currentNode.getAttribute (); + } + currentNode = currentNode.getNext(); + count++; + } + return default(T); + } + + public IEnumerator iterator() { + Node currentNode = head.getNext(); + int count = 0; + int len = currentNode.length(); + while (len != count) { + yield return (T)currentNode.getAttribute(); + currentNode = currentNode.getNext (); + count++; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + + public List delete(int num) { + Node newNode = head.delete(0, num); + if (newNode == null) + return this; + return new List(newNode); + } + + public List replace(int num, T attribute) { + Node newHead = head.replaceNode(0, num, attribute); + if (newHead == null) + return this; + return new List(newHead); + } + + public T tail() { + return index(length() - 1); + } + + // java code head. + public T headList() { + return index(0); + } + + public List deleteLast() { + return delete(head.length() - 1); + } + + public List deleteHead() { + return delete(0); + } + + public int length() { + return head.length(); + } + + public List append(List list) { + IEnumerator iterator = list.iterator(); + List newList = this; + while (iterator.MoveNext()) { + T attribute = iterator.Current; + newList = newList.addLast(attribute); + } + return newList; + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/List.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/List.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 988c71903140e9943bf4e02cd68b83a3 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/Node.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/Node.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,17 @@ + +public interface Node { + + Node getNext(); + + Node add(int currentNum, int num, T attribute); + + Node addLast(T attribute); + + Node delete(int currentNum, int num); + + Node replaceNode(int currentNum, int num, T attribute); + + int length(); + + T getAttribute(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/Node.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/Node.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c093d5cb0f302df45be934955066bd2e +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/TailNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/TailNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; +using System; + +public class TailNode : Node { + + public Node getNext() { + return null; + } + + public T getAttribute() { + return default(T); + } + + public Node add(int currentNum, int num, T attribute) { + return null; + } + + public Node delete(int currentNum, int num) { + return null; + } + + public Node replaceNode(int currentNum, int num, T attribute) { + return null; + } + + public Node addLast(T attribute) { + return new DefaultNode (attribute, this); + } + + public T getAttribure() + { + throw new NotImplementedException(); + } + + public int length() + { + return 0; + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/TailNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/TailNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 42ce5176c868f9c468e9722e00eb7d57 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/headNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/headNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,69 @@ +using UnityEngine; +using System.Collections; +using System; + +public class headNode : Node{ + private readonly Node next; + + public headNode(){ + this.next = new TailNode (); + } + + public headNode(Node next){ + this.next = next; + } + + public Node getNext(){ + return next; + } + + public T getAttribute(){ + return default(T); + } + + public Node add(int currentNum, int num, T attribute) { + if (num == 0) { + Node newNode = new DefaultNode(attribute, next); + return new headNode(newNode); + } + Node newNodes = next.add(currentNum + 1, num, attribute); + if (newNodes == null) { + return this; + } + return new headNode(newNodes); + } + + public Node addLast(T attribute) { + Node node = next.addLast(attribute); + return new headNode(node); + } + + public Node delete(int currentNum, int deleteNum) { + if (currentNum == deleteNum) { + return new headNode(this.next.getNext()); + } + + Node newNode = next.delete(currentNum + 1, deleteNum); + if (newNode == null) { + return this; + } + return new headNode(newNode); + } + + public Node replaceNode(int currentNum, int num, T attribute) { + Node nextNode = getNext(); + Node newNode = nextNode.replaceNode(currentNum, num, attribute); + if (newNode == null) + return this; + return new headNode(newNode); + } + + public int length() { + return next.length(); + } + + public T getAttribure() + { + throw new NotImplementedException(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/list/headNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/list/headNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c0c8ddcddce1719498a052c9b50fbe5d +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ad16a47d84b0f6c4fa8510bd852ec767 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/BlackNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/BlackNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,126 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Collections; +using System; + +public class BlackNode + :TreeMapNode +{ + + public BlackNode (K key, V value, TreeMapNode left, TreeMapNode right) + : base (key, value, left, right) + { + } + + public override rebuildNode deleteNode () + { + EmptyNode emptyNode = new EmptyNode (key); + return new rebuildNode (true, emptyNode); + } + + public override int checkDepth (int count, int minCount) + { // test method + count++; + minCount = lefts ().checkDepth (count, minCount); + minCount = rights ().checkDepth (count, minCount); + return minCount; + } + + public override bool isNotEmpty () + { + return true; + } + + public override TreeMapNode createNode (K key, V value, TreeMapNode left, TreeMapNode right) + { + return new BlackNode (key, value, left, right); + } + + public override TreeMapNode insBalance () + { + Rotate spin = left.checkRotate (Rotate.L); + + if (spin == Rotate.R) { + TreeMapNode leftChild = new BlackNode (left.lefts ().getKey (), left.lefts ().getValue (), left.lefts ().lefts (), left.lefts ().rights ()); + TreeMapNode rightChild = new BlackNode (getKey (), getValue (), left.rights (), right); + return new RedNode (left.getKey (), left.getValue (), leftChild, rightChild); + + } else if (spin == Rotate.LR) { + TreeMapNode leftChild = new BlackNode (left.getKey (), left.getValue (), left.lefts (), left.rights ().lefts ()); + TreeMapNode rightChild = new BlackNode (getKey (), getValue (), left.rights ().rights (), right); + return new RedNode (left.rights ().getKey (), left.rights ().getValue (), leftChild, rightChild); + + } + + spin = right.checkRotate (Rotate.R); + if (spin == Rotate.L) { + TreeMapNode leftChild = new BlackNode (getKey (), getValue (), left, right.lefts ()); + TreeMapNode rightChild = new BlackNode (right.rights ().getKey (), right.rights ().getValue (), right.rights ().lefts (), right.rights ().rights ()); + return new RedNode (right.getKey (), right.getValue (), leftChild, rightChild); + + } else if (spin == Rotate.RL) { + TreeMapNode leftChild = new BlackNode (getKey (), getValue (), left, right.lefts ().lefts ()); + TreeMapNode rightChild = new BlackNode (right.getKey (), right.getValue (), right.lefts ().rights (), right.rights ()); + return new RedNode (right.lefts ().getKey (), right.lefts ().getValue (), leftChild, rightChild); + + } + + return this; + } + + public override Rotate checkRotate (Rotate side) + { + return Rotate.N; + } + + public override bool isRed () + { + return false; + } + + public override rebuildNode replaceNode (TreeMapNode parent, Comparer ctr) + { + TreeMapNode newNode; + if (!this.lefts ().isNotEmpty () && !this.rights ().isNotEmpty ()) { //自身を削除する + return deleteNode ();//黒が1つ減るので木のバランスを取る + } else if (this.lefts ().isNotEmpty () && !this.rights ().isNotEmpty ()) { //左の部分木を昇格させる + newNode = createNode (lefts ().getKey (), lefts ().getValue (), lefts ().lefts (), lefts ().rights ()); + if (!this.lefts ().isRed ()) //昇格させる木のrootが黒だったらバランスを取る + return new rebuildNode (true, newNode); + return new rebuildNode (false, newNode); + } else if (!this.lefts ().isNotEmpty () && this.rights ().isNotEmpty ()) { //右の部分木を昇格させる + newNode = createNode (rights ().getKey (), rights ().getValue (), rights ().lefts (), rights ().rights ()); + if (!this.rights ().isRed ()) //昇格させる木のrootが黒だったらバランスを取る + return new rebuildNode (true, newNode); + return new rebuildNode (false, newNode); + } else {//子ノードが左右にある場合 二回目はここには入らない + //左の部分木の最大の値を持つNodeと自身を置き換える + TreeMapNode cur = this.lefts (); + while (cur.rights ().isNotEmpty ()) { //左の部分期の最大値を持つNodeを取得する + cur = cur.rights (); + } + if (this.lefts ().rights ().isNotEmpty ()) { //左の部分木が右の子を持っているか + rebuildNode leftSubTreeNodeRebuildNode = this.lefts ().deleteSubTreeMaxNode (null, ctr, Rotate.L);//最大値を削除した左の部分木を返す。rootはthisと同じ。 + if (leftSubTreeNodeRebuildNode.rebuilds ()) { + TreeMapNode leftSubTreeNode = leftSubTreeNodeRebuildNode.getNode (); + TreeMapNode newParent = createNode (cur.getKey (), cur.getValue (), leftSubTreeNode, this.rights ()); + return leftSubTreeNode.deleteBalance (newParent, ctr); + } + //same name onece used. + TreeMapNode leftSubTreeNodes = leftSubTreeNodeRebuildNode.getNode (); + newNode = createNode (cur.getKey (), cur.getValue (), leftSubTreeNodes, this.rights ()); //rootをcurと入れ替えることでNodeの削除は完了する + return new rebuildNode (false, newNode); + } else { + rebuildNode leftSubTreeNodeRebuildNode = this.lefts ().replaceNode (this, ctr);//右の子がいなかった場合、左の子を昇格させるだけで良い。 + if (leftSubTreeNodeRebuildNode.rebuilds ()) { + TreeMapNode node = leftSubTreeNodeRebuildNode.getNode (); + TreeMapNode newParent = createNode (this.lefts ().getKey (), this.lefts ().getValue (), node, this.rights ()); + return node.deleteBalance (newParent, ctr); + } + TreeMapNode leftSubTreeNode = leftSubTreeNodeRebuildNode.getNode (); + newNode = createNode (this.lefts ().getKey (), this.lefts ().getValue (), leftSubTreeNode, this.rights ()); + return new rebuildNode (false, newNode); + } + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/BlackNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/BlackNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93f422f161c5b5e42a7aadda007ae55e +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/EmptyClass.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/EmptyClass.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +using System; + +namespace AssemblyCSharpfirstpass +{ + public class NULL + { + public NULL () + { + } + } +} + diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/EmptyClass.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/EmptyClass.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 82002694108fdbb4794b121c403895a6 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/EmptyNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/EmptyNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,69 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +public class EmptyNode : TreeMapNode{ + //static V values; + // Use this for initialization + public EmptyNode () + : base (default(K),default(V)) + { + } + + public EmptyNode (K key) + : base (key,default(V)) + { + } + + public override TreeMapNode lefts(){ + return new EmptyNode(); + } + + public override TreeMapNode rights(){ + return new EmptyNode(); + } + + public override bool isNotEmpty(){ + return false; + } + + public override TreeMapNode createNode(K key,V value,TreeMapNode left, TreeMapNode right){ + return new RedNode (key, value, new EmptyNode (), new EmptyNode ()); + } + + public TreeMapNode put(K k,V value){ + return new RedNode (k, value, new EmptyNode (), new EmptyNode ()); + } + + //I don't know only Comparator method. + public override rebuildNode replaceNode(TreeMapNode parent, Comparer ctr) { // not use method + return new rebuildNode(false, this); + } + + public override rebuildNode deleteNode(){ + return new rebuildNode (false, this); + } + + public override TreeMapNode insBalance(){ + return insBalance(); + } + + public override Rotate checkRotate(Rotate side){ + return Rotate.N; + } + + public override bool isRed(){ + return false; + } + + public override int checkDepth(int count, int minCount) { // test method + if (count < minCount || minCount == 0) { + minCount = count; + } + //c# is there assert?? + //Assert.assertTrue(count <= 2 * minCount); + return minCount; + } + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/EmptyNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/EmptyNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a0321bf79fae55942bb3f7f3a7533b06 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/RedNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/RedNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,101 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; + +public class RedNode : TreeMapNode{ + + // Use this for initialization + public RedNode (K key, V value, TreeMapNode left, TreeMapNode right) + : base (key, value, left, right) + { + } + + // Update is called once per frame + public override bool isNotEmpty () + { + return true; + } + + public override rebuildNode deleteNode() { + TreeMapNode emptyNode = new EmptyNode(this.getKey()); + return new rebuildNode(false, emptyNode); + } + + public override Rotate checkRotate(Rotate side) { + if (side == Rotate.L) { + if (left.isRed()) + return Rotate.R; + else if (right.isRed()) + return Rotate.LR; + return Rotate.N; + } else { + if (left.isRed()) + return Rotate.RL; + else if (right.isRed()) + return Rotate.L; + return Rotate.N; + } + } + + public override rebuildNode replaceNode(TreeMapNode parent, Comparer ctr) { + TreeMapNode newNode; + if (!this.lefts().isNotEmpty() && !this.rights().isNotEmpty()) { //自身を削除する + return deleteNode(); + } else if (this.lefts().isNotEmpty() && !this.rights().isNotEmpty()) { //左の部分木を昇格させる + newNode = lefts().createNode(lefts().getKey(), lefts().getValue(), lefts().lefts(), lefts().rights()); + return new rebuildNode(false, newNode); + } else if (!this.lefts().isNotEmpty() && this.rights().isNotEmpty()) { //右の部分木を昇格させる + newNode = rights().createNode(rights().getKey(), rights().getValue(), rights().lefts(), rights().rights()); + return new rebuildNode(false, newNode); + } else {//子ノードが左右にある場合 + //左の部分木の最大の値を持つNodeと自身を置き換える + TreeMapNode cur = this.lefts(); + + while (cur.rights().isNotEmpty()) { + cur = cur.rights(); + } + if (this.lefts().rights().isNotEmpty()) { + rebuildNode leftSubTreeNodeRebuildNode = this.lefts().deleteSubTreeMaxNode(null, ctr, Rotate.L); + if (leftSubTreeNodeRebuildNode.rebuilds()) { + TreeMapNode node = leftSubTreeNodeRebuildNode.getNode(); + TreeMapNode newParent = createNode(cur.getKey(), cur.getValue(), node, this.rights()); + return node.deleteBalance(newParent, ctr); + } + TreeMapNode leftSubTreeNode = leftSubTreeNodeRebuildNode.getNode(); + newNode = createNode(cur.getKey(), cur.getValue(), leftSubTreeNode, this.rights()); + return new rebuildNode(false, newNode); + } else { + rebuildNode leftSubTreeNodeRebuildNode = this.lefts().replaceNode(this, ctr); + if (leftSubTreeNodeRebuildNode.rebuilds()) { + TreeMapNode node = leftSubTreeNodeRebuildNode.getNode(); + TreeMapNode newParent = createNode(this.lefts().getKey(), this.lefts().getValue(), node, this.rights()); + return node.deleteBalance(newParent, ctr); + } + TreeMapNode leftSubTreeNode = leftSubTreeNodeRebuildNode.getNode(); + newNode = createNode(cur.getKey(), cur.getValue(), leftSubTreeNode, this.rights()); + return new rebuildNode(false, newNode); + } + + } + } + + public override bool isRed() { + return true; + } + + public override TreeMapNode createNode(K key, V value, TreeMapNode left, TreeMapNode right) { + return new RedNode(key, value, left, right); + } + + public override TreeMapNode insBalance() { + return this; + } + + public override int checkDepth(int count, int minCount) { // test method + count++; + minCount = lefts().checkDepth(count, minCount); + minCount = rights().checkDepth(count, minCount); + return minCount; + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/RedNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/RedNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ed91abb32f987f44787cd6b455938fbd +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/Rotate.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/Rotate.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ +using UnityEngine; +using System.Collections; + +public enum Rotate{ + R,L,RL,LR,N +} + diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/Rotate.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/Rotate.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 50cb0e4c272e25c46bbda905191174e3 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/TreeMap.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/TreeMap.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,131 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace JungleDB { + public class TreeMap { + TreeMapNode root; + Comparer comparator; + + + public TreeMap(IComparer icompere) { + this.root = new EmptyNode (); + } + + public TreeMap() { + this.root = new EmptyNode (); + this.comparator = Comparer.Default; + } + + public TreeMap(TreeMapNode root) { + this.root = root; + } + + public TreeMap(TreeMapNode root, Comparer comparator) { + this.root = root; + this.comparator = comparator; + } + + public TreeMapNode getRoot() { + return root; + } + + public V get(K key) { + return root.get(key, this.comparator); + } + + public TreeMap put(K key, V value) { + if(isEmpty()) { + TreeMapNode newRoot = new BlackNode (key, value, new EmptyNode (), new EmptyNode ()); + return new TreeMap (newRoot, this.comparator); + } + + TreeMapNode newEntry = root.put (key, value, this.comparator); + TreeMapNode newRoots = new BlackNode (newEntry.getKey (), newEntry.getValue (), newEntry.lefts (), newEntry.rights ()); + return new TreeMap (newRoots, this.comparator); + } + + public bool isEmpty() { + return !root.isNotEmpty (); + } + + public TreeMap delete(K key) { + if (key.Equals(default(K))) { + return this; + } + rebuildNode rootRebuildNode = root.delete (key, null, this.comparator, Rotate.N); + if (!rootRebuildNode.notEmpty ()) { + return this; + } + TreeMapNode roots = rootRebuildNode.getNode (); + if (!root.isNotEmpty ()) { + return new TreeMap (new EmptyNode (), this.comparator); + } + TreeMapNode newRoot = new BlackNode (roots.getKey (), roots.getValue (), roots.lefts (), roots.rights ()); + return new TreeMap (newRoot, this.comparator); + } + // like to iterator and IEmurator. + public IEnumerator keys() { + return new iterators (); + } + + + public void checkDepth() { + root.checkDepth (0, 0); + Debug.Log ("-----------------------------------"); + } + + public class iterators : IEnumerator { + Stack> nodeStack = new Stack>(); + TreeMapNode currentNode = new TreeMap().getRoot(); + public List appLines { get; set; } + private int position; + + + public bool MoveNext() { + return currentNode != null; + } + + + public K Current{ + get { + K key = currentNode.getKey (); + if (currentNode.lefts ().isNotEmpty ()) { + nodeStack.Push (currentNode); + currentNode = currentNode.lefts (); + return key; + } else if (currentNode.rights ().isNotEmpty ()) { + currentNode = currentNode.rights (); + return key; + } else if (nodeStack.Count == 0) { + currentNode = null; + return key; + } + do { + currentNode = nodeStack.Pop ().rights (); + if (currentNode.isNotEmpty ()) { + return key; + } + }while (nodeStack.Count != 0); + return key; + } + } + + object IEnumerator.Current + { + get { return appLines; } + } + + public void Dispose() { + ((IEnumerator)this.appLines).Dispose (); + } + + public void Reset() { + ((IEnumerator)this.appLines).Reset(); + } + + } + } +} + diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/TreeMap.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/TreeMap.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e2a5593baff94104f8388d181f9417ef +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/TreeMapNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/TreeMapNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,332 @@ +using System.Collections; +using System; +using UnityEngine; +using System.Collections.Generic; + + +public abstract class TreeMapNode +{ + + protected K key = default(K); + protected V value = default(V); + + public TreeMapNode right; + public TreeMapNode left; + + + // Use this for initialization + public TreeMapNode (K key, V value) + { + this.key = key; + this.value = value; + } + + public TreeMapNode (K key, V value, TreeMapNode left, TreeMapNode right) + { + this.key = key; + this.value = value; + this.right = right; + this.left = left; + } + + public virtual TreeMapNode lefts () + { + return left; + } + + + public int compare(K compareKey, Comparer ctr) { + return ctr.Compare (compareKey, this.getKey ()); + } + + public V get (K key, Comparer ctr){ + TreeMapNode cur = this; + while (cur.isNotEmpty ()) { // getでEmpty nodeを返している ? compareでKeyが0になっている + int result = cur.compare (key, ctr); + if (result > 0) { + cur = cur.rights (); + } else if (result < 0) { + cur = cur.lefts (); + } else if (result == 0) { + if (cur != null) { + return cur.getValue (); + } + } + } + return default(V); + } + + + + public virtual TreeMapNode rights () { + return right; + } + + public K getKey () { + return key; + } + + public V getValue () { + return value; + } + + public TreeMapNode put (K k, V v,Comparer ctr) { + + if (!isNotEmpty ()) { + return createNode (k, v, left, right); + } + + int result = compare (k, ctr); + if (result > 0) { + TreeMapNode node = right.put (k, v, ctr); + node = createNode (key, this.value, left, node); + return node.insBalance (); + } else if (result < 0) { + TreeMapNode node = left.put (k, v,ctr); + return createNode (key, this.value, node, right).insBalance (); + } + return createNode (key, v, left, right); + } + + public rebuildNode delete (K key, TreeMapNode parent, Comparer ctr, Rotate side) + { + if (this.isNotEmpty ()) { + rebuildNode rebuildNode = null; + int result = compare(key, ctr); + if (result > 0) { + rebuildNode = right.delete (key, this, ctr, Rotate.R); + } else if (result < 0) { + rebuildNode = left.delete (key, this, ctr, Rotate.L); + } else if (result == 0){ + rebuildNode = replaceNode (parent, ctr); + } + if (parent == null) { + return rebuildNode; + } + TreeMapNode node = rebuildNode.getNode (); + if (rebuildNode.rebuilds ()) { + // ここのエラーは後で + return node.deleteBalance (parent, ctr); + } + TreeMapNode newParent; + if (side == Rotate.L) { + newParent = parent.createNode (parent.getKey (), parent.getValue (), node, parent.rights ()); + } else { + newParent = parent.createNode (parent.getKey (), parent.getValue (), parent.lefts (), node); + } + return new rebuildNode (false, newParent); + } + return null; + } + + public rebuildNode deleteSubTreeMaxNode (TreeMapNode parent, Comparer ctr, Rotate side) + { + rebuildNode rebuildNode; + TreeMapNode node; + if (rights ().isNotEmpty ()) {// 最大値のノードが取得できるまで潜る + rebuildNode = rights ().deleteSubTreeMaxNode (this, ctr, Rotate.R); + } else { + rebuildNode = this.replaceNode (parent, ctr); + } + if (parent == null) + return rebuildNode; + + if (rebuildNode.rebuilds ()) { + node = rebuildNode.getNode (); + return node.deleteBalance (parent, ctr); + } + if (side == Rotate.R) + node = parent.createNode (parent.getKey (), parent.getValue (), parent.lefts (), rebuildNode.getNode ()); + else + node = parent.createNode (parent.getKey (), parent.getValue (), rebuildNode.getNode (), parent.rights ()); + return new rebuildNode (false, node); + } + + + public rebuildNode deleteBalance (TreeMapNode parent, Comparer ctr) + { + TreeMapNode newNode = null; + if (!isRed ()) { + if (0 > compare (parent.getKey (), ctr)) { + bool rightChild = parent.lefts ().rights ().isRed (); + bool leftChild = parent.lefts ().lefts ().isRed (); + + if (!parent.isRed ()) { + if (!parent.lefts ().isRed ()) { + if (!rightChild && !leftChild) { + newNode = rebuildThree (parent, Rotate.R); + return new rebuildNode (true, newNode); + } + if (rightChild) { + newNode = rebuildfive (parent, Rotate.R); + return new rebuildNode (false, newNode); + } else { + newNode = rebuildsix (parent, Rotate.R); + return new rebuildNode (false, newNode); + } + } else { // 左の子が赤 + newNode = rebuildTwo (parent, ctr, Rotate.R); + return new rebuildNode (false, newNode); + } + } else { // 親が赤 + if (!rightChild && !leftChild) { + newNode = rebuildFour (parent, Rotate.R); + return new rebuildNode (false, newNode); + } + if (rightChild) { + newNode = rebuildfive (parent, Rotate.R); + return new rebuildNode (false, newNode); + } else { + newNode = rebuildsix (parent, Rotate.R); + return new rebuildNode (false, newNode); + } + } + } else { + bool rightChild = parent.rights ().rights ().isRed (); + bool leftChild = parent.rights ().lefts ().isRed (); + + if (!parent.isRed ()) { // 親が黒 + if (!parent.rights ().isRed ()) { // 左の子が黒 + if (!rightChild && !leftChild) { + newNode = rebuildThree (parent, Rotate.L); + return new rebuildNode (true, newNode); + } + if (rightChild) { + newNode = rebuildsix (parent, Rotate.L); + return new rebuildNode (false, newNode); + } else { + newNode = rebuildfive (parent, Rotate.L); + return new rebuildNode (false, newNode); + } + } else { // 左の子が赤 + newNode = rebuildTwo (parent, ctr, Rotate.L); + return new rebuildNode (false, newNode); + } + } else { // 親が赤 + if (!rightChild && !leftChild) { + newNode = rebuildFour (parent, Rotate.L); + return new rebuildNode (false, newNode); + } + if (rightChild) { + newNode = rebuildsix (parent, Rotate.L); + return new rebuildNode (false, newNode); + } else { + newNode = rebuildfive (parent, Rotate.L); + return new rebuildNode (false, newNode); + } + } + } + } + if (0 > (compare (parent.getKey (), ctr))) { + newNode = parent.createNode (parent.getKey (), parent.getValue (), parent.lefts (), this); + return new rebuildNode (false, newNode); + } else { + newNode = parent.createNode (parent.getKey (), parent.getValue (), this, parent.rights ()); + return new rebuildNode (false, newNode); + } + } + + protected TreeMapNode rebuildTwo (TreeMapNode parent, Comparer ctr, Rotate side) + { // case2 + if (side == Rotate.L) { // rotate Left + TreeMapNode node = parent.rights (); + TreeMapNode leftSubTreeRoot = node.createNode (parent.getKey (), parent.getValue (), this, node.lefts ()); // check + rebuildNode rebuildNode = new rebuildNode (false, leftSubTreeRoot); + rebuildNode leftNodeRebuildNode = this.deleteBalance (rebuildNode.getNode (), ctr); + TreeMapNode rightNode = node.rights (); + return parent.createNode (node.getKey (), node.getValue (), leftNodeRebuildNode.getNode (), rightNode); + } else { // rotate Right + TreeMapNode node = parent.lefts (); + TreeMapNode rightSubTreeRoot = node.createNode (parent.getKey (), parent.getValue (), node.rights (), this); + rebuildNode rightSubTreeRebuildNode = new rebuildNode (false, rightSubTreeRoot); + rebuildNode rightNodeRebuildNode = this.deleteBalance (rightSubTreeRebuildNode.getNode (), ctr); + TreeMapNode leftNode = node.lefts (); + return parent.createNode (node.getKey (), node.getValue (), leftNode, rightNodeRebuildNode.getNode ()); + } + } + + protected TreeMapNode rebuildThree (TreeMapNode parent, Rotate side) + { // case3 再帰 + if (side == Rotate.L) { + TreeMapNode rightNode; + if (parent.rights ().isNotEmpty ()) + rightNode = new RedNode (parent.rights ().getKey (), parent.rights ().getValue (), parent.rights ().lefts (), parent.rights ().rights ()); // check + else + rightNode = new EmptyNode (); + return parent.createNode (parent.getKey (), parent.getValue (), this, rightNode); + } else { + TreeMapNode leftNode; + if (parent.lefts ().isNotEmpty ()) + leftNode = new RedNode (parent.lefts ().getKey (), parent.lefts ().getValue (), parent.lefts ().lefts (), parent.lefts ().rights ()); // check + else + leftNode = new EmptyNode (); + return parent.createNode (parent.getKey (), parent.getValue (), leftNode, this); + } + } + + protected TreeMapNode rebuildFour (TreeMapNode parent, Rotate side) + { // case 4 + if (side == Rotate.R) { + TreeMapNode leftNode = new RedNode (parent.lefts ().getKey (), parent.lefts ().getValue (), parent.lefts ().lefts (), parent.lefts ().rights ()); + return new BlackNode (parent.getKey (), parent.getValue (), leftNode, this); + } else { + TreeMapNode rightNode = new RedNode (parent.rights ().getKey (), parent.rights ().getValue (), parent.rights ().lefts (), parent.rights ().rights ()); + return new BlackNode (parent.getKey (), parent.getValue (), this, rightNode); + } + } + + protected TreeMapNode rebuildfive (TreeMapNode parent, Rotate side) + { // case5 + if (side == Rotate.R) { // rotate Left + TreeMapNode leftChild = new RedNode (parent.lefts ().getKey (), parent.lefts ().getValue (), parent.lefts ().lefts (), parent.lefts ().rights ().lefts ()); + TreeMapNode rightChild = parent.lefts ().rights ().rights (); + TreeMapNode leftSubTreeRoot = new BlackNode (parent.lefts ().rights ().getKey (), parent.lefts ().rights ().getValue (), leftChild, rightChild); + TreeMapNode newParent = parent.createNode (parent.getKey (), parent.getValue (), leftSubTreeRoot, this); + return this.rebuildsix (newParent, Rotate.R); + } else { // rotate Right 修正済み + TreeMapNode leftChild = parent.rights ().lefts ().lefts (); + TreeMapNode rightChild = new RedNode (parent.rights ().getKey (), parent.rights ().getValue (), parent.rights ().lefts ().rights (), parent.rights ().rights ()); + TreeMapNode rightSubTreeRoot = new BlackNode (parent.rights ().lefts ().getKey (), parent.rights ().lefts ().getValue (), leftChild, rightChild); + TreeMapNode newParent = parent.createNode (parent.getKey (), parent.getValue (), this, rightSubTreeRoot); + return this.rebuildsix (newParent, Rotate.L); + } + } + + protected TreeMapNode rebuildsix (TreeMapNode parent, Rotate side) + { // case6 + if (side == Rotate.L) { // rotate Left + TreeMapNode leftChild = parent.rights ().createNode (parent.getKey (), parent.getValue (), this, parent.rights ().lefts ()); // check + TreeMapNode rightChild = new BlackNode (parent.rights ().rights ().getKey (), parent.rights ().rights ().getValue (), parent.rights ().rights ().lefts (), parent.rights ().rights ().rights ()); + return parent.createNode (parent.rights ().getKey (), parent.rights ().getValue (), leftChild, rightChild); + } else { // rotate Right + TreeMapNode leftChild = new BlackNode (parent.lefts ().lefts ().getKey (), parent.lefts ().lefts ().getValue (), parent.lefts ().lefts ().lefts (), parent.lefts ().lefts ().rights ()); + TreeMapNode rightChild = parent.lefts ().createNode (parent.getKey (), parent.getValue (), parent.lefts ().rights (), this); + return parent.createNode (parent.lefts ().getKey (), parent.lefts ().getValue (), leftChild, rightChild); + } + } + + + + + + + + + public abstract bool isNotEmpty (); + + public abstract TreeMapNode createNode (K key, V value, TreeMapNode left, TreeMapNode right); + + public abstract TreeMapNode insBalance (); + + + public abstract Rotate checkRotate (Rotate side); + + public abstract bool isRed (); + + public abstract rebuildNode replaceNode (TreeMapNode parent, Comparer ctr); + + public abstract rebuildNode deleteNode (); + + // test method + public abstract int checkDepth (int count, int minCount); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/TreeMapNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/TreeMapNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 99047788a46bd2047af1b3f9fe101ef5 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/rebuildNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/rebuildNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,25 @@ +using UnityEngine; +using System.Collections; +using System; + +public class rebuildNode { + private bool rebuild; + TreeMapNode node; + + public rebuildNode(bool l,TreeMapNode node){ + this.rebuild = l; + this.node = node; + } + //don't same name. + public bool rebuilds(){ + return rebuild; + } + + public TreeMapNode getNode(){ + return node; + } + + public bool notEmpty(){ + return node != null; + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/data/treemap/rebuildNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/data/treemap/rebuildNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1f42bbadfd1bcea45997a29dbdf2965e +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d8a045f73fb6d25438b37ab98657403b +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeList.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeList.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace JungleDB { + public interface ChangeList : IEnumerable { + string uuids(); + string getTreeName(); + TreeOperationLog getLog(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeList.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeList.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5fdae932150a74448bf775b479a33833 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeListReader.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeListReader.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface ChangeListReader{ + ChangeListReader newReader(); + ChangeList read(); + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeListReader.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeListReader.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c0cc64e8eb988ef40abca20c0fd04529 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeListWriter.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeListWriter.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public interface ChangeListWriter { + Result write (ChangeList operations); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/ChangeListWriter.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/ChangeListWriter.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ce5a2dd540e79be45ac570ebc3fcffc2 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/Journal.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/Journal.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface Journal { + ChangeListReader getReader(); + ChangeListWriter getWriter(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/Journal.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/Journal.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2f638429ccc96c643a757dab88ce1a3c +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/NullJournal.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/NullJournal.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace JungleDB { + public class NullJournal : Journal { + + private static NullChangeListWriter NULL_WRITER = new NullChangeListWriter(); + private static NullChangeListReader NULL_READER = new NullChangeListReader(); + + public ChangeListReader getReader() { + return NULL_READER; + } + + public ChangeListWriter getWriter() { + return NULL_WRITER; + } + + private class NullChangeListWriter : ChangeListWriter{ + public Result write(ChangeList operations){ + return Result.SUCCESS; + } + } + + private class NullChangeListReader : ChangeListReader { + public ChangeListReader newReader() { + return this; + } + + public ChangeList read() { + return null; + } + + public IEnumerator iterator() { + return null; + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/NullJournal.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/NullJournal.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 51e1e118fb016444e8e0626ebb4eecf4 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/Result.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/Result.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,19 @@ + +public class Result { + public static Result ACCEPT = new Result("ACCEPT"); + public static Result CONTINUE = new Result("CONTINUE"); + public static Result BREAK = new Result("BREAK"); + public static Result GOAL = new Result("GOAL"); + public static Result SUCCESS = new Result ("SUCCESS"); + + private string name; + + private Result(string _name) { + name = _name; + } + + private string toString() { + return name; + } + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/Result.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/Result.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8fa38ddc1a944349b51a069813f11dc +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/SingletonMessage.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/SingletonMessage.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +using UnityEngine; +using System.Collections; + +public class SingletonMessage : MonoBehaviour { + + public static MsgPack.ObjectPacker getInstance () { + return new MsgPack.ObjectPacker(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/SingletonMessage.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/SingletonMessage.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b823ee441970d84f91c778d32b1651a +timeCreated: 1477164627 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a2b4ae7b760328d43a20652173ed61b3 +folderAsset: yes +timeCreated: 1477164443 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/HEAD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/HEAD Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +ref: refs/heads/master diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/config --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/config Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,13 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = https://github.com/masharada/msgpack-unity.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/description --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/description Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/applypatch-msg.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/applypatch-msg.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/commit-msg.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/commit-msg.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/post-update.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/post-update.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/pre-applypatch.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/pre-applypatch.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/pre-commit.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/pre-commit.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/pre-push.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/pre-push.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +z40=0000000000000000000000000000000000000000 + +while read local_ref local_sha remote_ref remote_sha +do + if [ "$local_sha" = $z40 ] + then + # Handle delete + : + else + if [ "$remote_sha" = $z40 ] + then + # New branch, examine all commits + range="$local_sha" + else + # Update to existing branch, examine new commits + range="$remote_sha..$local_sha" + fi + + # Check for WIP commit + commit=`git rev-list -n 1 --grep '^WIP' "$range"` + if [ -n "$commit" ] + then + echo >&2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/pre-rebase.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/pre-rebase.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up-to-date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +exit 0 + +################################################################ + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/prepare-commit-msg.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/prepare-commit-msg.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +case "$2,$3" in + merge,) + /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$1" ;; + + *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/hooks/update.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/hooks/update.sample Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/index Binary file Main/jungle-main/persistent/msgpack/.git/index has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/info/exclude --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/info/exclude Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/logs/HEAD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/logs/HEAD Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +0000000000000000000000000000000000000000 e7c80cc200584b818c491a184cfc6f2b5f9e17a8 Kazuma Takeda 1477164441 +0900 clone: from https://github.com/masharada/msgpack-unity.git diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/logs/refs/heads/master --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/logs/refs/heads/master Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +0000000000000000000000000000000000000000 e7c80cc200584b818c491a184cfc6f2b5f9e17a8 Kazuma Takeda 1477164441 +0900 clone: from https://github.com/masharada/msgpack-unity.git diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/logs/refs/remotes/origin/HEAD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/logs/refs/remotes/origin/HEAD Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +0000000000000000000000000000000000000000 e7c80cc200584b818c491a184cfc6f2b5f9e17a8 Kazuma Takeda 1477164441 +0900 clone: from https://github.com/masharada/msgpack-unity.git diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/00/c8e51cd16ac10c74dd2f9974e6261ae72dfe4c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/objects/00/c8e51cd16ac10c74dd2f9974e6261ae72dfe4c Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ +xSn0 5 +"촇[Ѓf.E8Bɓ^/a_8Iv-|QJ +w~/`|bt~7g0Q 3V,fP 5BX>]dh +. B1ht[р*TCZXR,Hޖ*E[}*>xj J(Ы@# vu]k^ ntO.Nh-^ICrDIRBԠ ŜfʵN|V\- 2LZgdRWuJtgBA?!pQ<"n bΖ4&u3}p7zH~d4hJָ`EqS)ISy%r\@HhL-̘R! n‹ y^e97níU))e=O-ZWƟUB^CZp/d۽Ez ˦$Q i|}2|:#${||B6>G } +UPɓ8,J5jѱ|DӻL'u~M6OV*\,%}P< ~WGI&" *2C3Ìj#TV\- uSiqV MПon:߄qnxϣm`}: :7̣'܆Nrn\J2)uTk[R"αLUL!XJ2>uDӎZ. yW/[t \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/05/4668352f9f1e28268bc74604ad4c73a3a24e74 Binary file Main/jungle-main/persistent/msgpack/.git/objects/05/4668352f9f1e28268bc74604ad4c73a3a24e74 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/18/17b354ce3301394fc5af5f8a2a17b690812ec1 Binary file Main/jungle-main/persistent/msgpack/.git/objects/18/17b354ce3301394fc5af5f8a2a17b690812ec1 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/1f/116ad7ca93823183d33d8223139c717df069c3 Binary file Main/jungle-main/persistent/msgpack/.git/objects/1f/116ad7ca93823183d33d8223139c717df069c3 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/2d/f9bb3e0866da49532c79177f5a2febd5b8973e Binary file Main/jungle-main/persistent/msgpack/.git/objects/2d/f9bb3e0866da49532c79177f5a2febd5b8973e has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/30/6b516bef3bf54505433f44b53d4fc99311ecd6 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/objects/30/6b516bef3bf54505433f44b53d4fc99311ecd6 Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +xUR͎0<Ũ'JESmIQ'45 h+0.|ߏVpů?$JXj3Zn../G q@Ț+RjUM 5X2! 'X+/eOջ@1:Ai#`{n "T3-=K8']zqf?hm Inm̸d-Wyz-#w%җ-G@#*,Ehh X yY5 pzt%69}> yZ@V}Zd"@?m,$/i D&,>WPo[<읡\54+Y%؅N;OHaGN&X㥔*5{43})a{bݍ]Gjh=G75 \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/34/d46e7bef952bd8fabb5f2847d7a283855b83fe --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/objects/34/d46e7bef952bd8fabb5f2847d7a283855b83fe Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +x}Sn06y^RIbT25ݦ !产,=<m]UVs3_|ϯq1 UQk,QLĚUr.8J (5 `J.Q$EuN[EJذP$a`)rXX`#T®N9C-#8i8*bntM'8='m˅k`YlNFsV2TYBf}0ji+\c$@43&3H!I;~&iߑ\%\ xRLa8$d2,i^-K@6%.Rt,Φ@.S4,C jI@ԐG7akCaXכ)4BG5G4Xx +iktӃ? J0Xy Gk6zby$%KOC|iG-lyNo:6^ϧʼn~%GwNvWtϠnX6t Mg_F8j:ԍK'/aLom?vVw_ \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/46/d080685b602b8ccec7a343da7c62256c35ad0c Binary file Main/jungle-main/persistent/msgpack/.git/objects/46/d080685b602b8ccec7a343da7c62256c35ad0c has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/50/bcb39015be539af4a654036cef49a5f08c0321 Binary file Main/jungle-main/persistent/msgpack/.git/objects/50/bcb39015be539af4a654036cef49a5f08c0321 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/57/543770118822a5eb91efa7cac5037297df169d Binary file Main/jungle-main/persistent/msgpack/.git/objects/57/543770118822a5eb91efa7cac5037297df169d has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/5e/618130994ffb0591f53545cf84a89f552df84f Binary file Main/jungle-main/persistent/msgpack/.git/objects/5e/618130994ffb0591f53545cf84a89f552df84f has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/5e/cbb52610087bad1c48572c99c998a4928013d5 Binary file Main/jungle-main/persistent/msgpack/.git/objects/5e/cbb52610087bad1c48572c99c998a4928013d5 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/61/c2225fc4a2b7742c3b8d3ec6cb6f78aac73868 Binary file Main/jungle-main/persistent/msgpack/.git/objects/61/c2225fc4a2b7742c3b8d3ec6cb6f78aac73868 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/6c/4d4e0b98bd4200dea587f867232aaf94fb7efa Binary file Main/jungle-main/persistent/msgpack/.git/objects/6c/4d4e0b98bd4200dea587f867232aaf94fb7efa has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/79/4aff4f6de364bc022a7653c2cde3116f184e8f Binary file Main/jungle-main/persistent/msgpack/.git/objects/79/4aff4f6de364bc022a7653c2cde3116f184e8f has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/79/a31fc6b0d5d061f5151d9e1ada8e54346e2c98 Binary file Main/jungle-main/persistent/msgpack/.git/objects/79/a31fc6b0d5d061f5151d9e1ada8e54346e2c98 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/8c/c971fe5e16554747f616b1f65e26103b5f71ec Binary file Main/jungle-main/persistent/msgpack/.git/objects/8c/c971fe5e16554747f616b1f65e26103b5f71ec has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/9a/c0ec3d0fb15a1b74cb749b1d25189f5bab7ff1 Binary file Main/jungle-main/persistent/msgpack/.git/objects/9a/c0ec3d0fb15a1b74cb749b1d25189f5bab7ff1 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/9c/6d483546704aaa1453f57ca14c6471830c91ac Binary file Main/jungle-main/persistent/msgpack/.git/objects/9c/6d483546704aaa1453f57ca14c6471830c91ac has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/a7/c97a61698cdf1839fcdcd447b37ecdd4ffd88e Binary file Main/jungle-main/persistent/msgpack/.git/objects/a7/c97a61698cdf1839fcdcd447b37ecdd4ffd88e has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/ae/899d9608dcb968d6073329c2cd45a4b9b825de Binary file Main/jungle-main/persistent/msgpack/.git/objects/ae/899d9608dcb968d6073329c2cd45a4b9b825de has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/be/c4d4c4558d625539410a5b3a2e69f48ec48f48 Binary file Main/jungle-main/persistent/msgpack/.git/objects/be/c4d4c4558d625539410a5b3a2e69f48ec48f48 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/d5/40b060aeccc5b4e1ab26aec45267e8ae7393c2 Binary file Main/jungle-main/persistent/msgpack/.git/objects/d5/40b060aeccc5b4e1ab26aec45267e8ae7393c2 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/e7/c80cc200584b818c491a184cfc6f2b5f9e17a8 Binary file Main/jungle-main/persistent/msgpack/.git/objects/e7/c80cc200584b818c491a184cfc6f2b5f9e17a8 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/objects/e9/8430e1f9a9d93e5971d6e65d0d70a771e6a070 Binary file Main/jungle-main/persistent/msgpack/.git/objects/e9/8430e1f9a9d93e5971d6e65d0d70a771e6a070 has changed diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/packed-refs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/packed-refs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled +e7c80cc200584b818c491a184cfc6f2b5f9e17a8 refs/remotes/origin/master diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/refs/heads/master --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/refs/heads/master Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +e7c80cc200584b818c491a184cfc6f2b5f9e17a8 diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.git/refs/remotes/origin/HEAD --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.git/refs/remotes/origin/HEAD Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,1 @@ +ref: refs/remotes/origin/master diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/.gitignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/.gitignore Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,6 @@ +# Build Folders (you can keep bin if you'd like, to store dlls and pdbs) +bin +obj + +# mstest test results +TestResults \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/README.md Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,34 @@ +# MessagePack for Unity + +## What is it? + +This is MessagePack serialization/deserialization for Unity (or Unity Pro.) + +This library is based on Kazuki's MessagePack for C# +(not the current official for CLI, because it depends on .NET framework 4.0.) + +## Install + +To install this, copy files in src to Assets folder in your project. + +## See also + + Official Library : https://github.com/msgpack/msgpack + + Original C# Implementation : https://github.com/kazuki/msgpack + +## License + + Copyright (C) 2011-2012 Kazuki Oikawa, Kazunari Kida + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/README.md.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/README.md.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be78f1d6b69133e43a6590b77281770a +timeCreated: 1477164443 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 14a09b08e67951c41a5fc0c8244e2605 +folderAsset: yes +timeCreated: 1477164443 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/BoxingPacker.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/BoxingPacker.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,184 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace MsgPack +{ + public class BoxingPacker + { + static Type KeyValuePairDefinitionType; + + static BoxingPacker () + { + KeyValuePairDefinitionType = typeof (KeyValuePair).GetGenericTypeDefinition (); + } + + public void Pack (Stream strm, object o) + { + MsgPackWriter writer = new MsgPackWriter (strm); + Pack (writer, o); + } + + public byte[] Pack (object o) + { + using (MemoryStream ms = new MemoryStream ()) { + Pack (ms, o); + return ms.ToArray (); + } + } + + void Pack (MsgPackWriter writer, object o) + { + if (o == null) { + writer.WriteNil (); + return; + } + + Type t = o.GetType (); + if (t.IsPrimitive) { + if (t.Equals (typeof (int))) writer.Write ((int)o); + else if (t.Equals (typeof (uint))) writer.Write ((uint)o); + else if (t.Equals (typeof (float))) writer.Write ((float)o); + else if (t.Equals (typeof (double))) writer.Write ((double)o); + else if (t.Equals (typeof (long))) writer.Write ((long)o); + else if (t.Equals (typeof (ulong))) writer.Write ((ulong)o); + else if (t.Equals (typeof (bool))) writer.Write ((bool)o); + else if (t.Equals (typeof (byte))) writer.Write ((byte)o); + else if (t.Equals (typeof (sbyte))) writer.Write ((sbyte)o); + else if (t.Equals (typeof (short))) writer.Write ((short)o); + else if (t.Equals (typeof (ushort))) writer.Write ((ushort)o); + else throw new NotSupportedException (); // char? + return; + } + + IDictionary dic = o as IDictionary; + if (dic != null) { + writer.WriteMapHeader (dic.Count); + foreach (System.Collections.DictionaryEntry e in dic) { + Pack (writer, e.Key); + Pack (writer, e.Value); + } + return; + } + + if (t.IsArray) { + Array ary = (Array)o; + Type et = t.GetElementType (); + + // KeyValuePair[] (Map Type) + if (et.IsGenericType && et.GetGenericTypeDefinition ().Equals (KeyValuePairDefinitionType)) { + PropertyInfo propKey = et.GetProperty ("Key"); + PropertyInfo propValue = et.GetProperty ("Value"); + writer.WriteMapHeader (ary.Length); + for (int i = 0; i < ary.Length; i ++) { + object e = ary.GetValue (i); + Pack (writer, propKey.GetValue (e, null)); + Pack (writer, propValue.GetValue (e, null)); + } + return; + } + + // Array + writer.WriteArrayHeader (ary.Length); + for (int i = 0; i < ary.Length; i ++) + Pack (writer, ary.GetValue (i)); + return; + } + } + + public object Unpack (Stream strm) + { + MsgPackReader reader = new MsgPackReader (strm); + return Unpack (reader); + } + + public object Unpack (byte[] buf, int offset, int size) + { + using (MemoryStream ms = new MemoryStream (buf, offset, size)) { + return Unpack (ms); + } + } + + public object Unpack (byte[] buf) + { + return Unpack (buf, 0, buf.Length); + } + + object Unpack (MsgPackReader reader) + { + if (!reader.Read ()) + throw new FormatException (); + + switch (reader.Type) { + case TypePrefixes.PositiveFixNum: + case TypePrefixes.NegativeFixNum: + case TypePrefixes.Int8: + case TypePrefixes.Int16: + case TypePrefixes.Int32: + return reader.ValueSigned; + case TypePrefixes.Int64: + return reader.ValueSigned64; + case TypePrefixes.UInt8: + case TypePrefixes.UInt16: + case TypePrefixes.UInt32: + return reader.ValueUnsigned; + case TypePrefixes.UInt64: + return reader.ValueUnsigned64; + case TypePrefixes.True: + return true; + case TypePrefixes.False: + return false; + case TypePrefixes.Float: + return reader.ValueFloat; + case TypePrefixes.Double: + return reader.ValueDouble; + case TypePrefixes.Nil: + return null; + case TypePrefixes.FixRaw: + case TypePrefixes.Raw16: + case TypePrefixes.Raw32: + byte[] raw = new byte[reader.Length]; + reader.ReadValueRaw (raw, 0, raw.Length); + return raw; + case TypePrefixes.FixArray: + case TypePrefixes.Array16: + case TypePrefixes.Array32: + object[] ary = new object[reader.Length]; + for (int i = 0; i < ary.Length; i ++) + ary[i] = Unpack (reader); + return ary; + case TypePrefixes.FixMap: + case TypePrefixes.Map16: + case TypePrefixes.Map32: + IDictionary dic = new Dictionary ((int)reader.Length); + int count = (int)reader.Length; + for (int i = 0; i < count; i ++) { + object k = Unpack (reader); + object v = Unpack (reader); + dic.Add (k, v); + } + return dic; + default: + throw new FormatException (); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/BoxingPacker.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/BoxingPacker.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cf4df4e8511bc9048a391981ececa845 +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/CompiledPacker.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/CompiledPacker.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,549 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Reflection.Emit; +using System.Threading; +using MsgPack.Compiler; + +namespace MsgPack +{ + public class CompiledPacker + { + static PackerBase _publicFieldPacker, _allFieldPacker; + PackerBase _packer; + + static CompiledPacker () + { + _publicFieldPacker = new MethodBuilderPacker (); + _allFieldPacker = new DynamicMethodPacker (); + } + + public CompiledPacker () : this (false) {} + public CompiledPacker (bool packPrivateField) + { + _packer = (packPrivateField ? _allFieldPacker : _publicFieldPacker); + } + + public void Prepare () + { + _packer.CreatePacker (); + _packer.CreateUnpacker (); + } + + #region Generics Pack/Unpack Methods + public byte[] Pack (T o) + { + using (MemoryStream ms = new MemoryStream ()) { + Pack (ms, o); + return ms.ToArray (); + } + } + + public void Pack (Stream strm, T o) + { + _packer.CreatePacker () (new MsgPackWriter (strm), o); + } + + public T Unpack (byte[] buf) + { + return Unpack (buf, 0, buf.Length); + } + + public T Unpack (byte[] buf, int offset, int size) + { + using (MemoryStream ms = new MemoryStream (buf, offset, size)) { + return Unpack (ms); + } + } + + public T Unpack (Stream strm) + { + return _packer.CreateUnpacker () (new MsgPackReader (strm)); + } + #endregion + + #region Non-generics Pack/Unpack Methods + public byte[] Pack (object o) + { + using (MemoryStream ms = new MemoryStream ()) { + Pack (ms, o); + return ms.ToArray (); + } + } + + public void Pack (Stream strm, object o) + { + throw new NotImplementedException (); + } + + public object Unpack (Type t, byte[] buf) + { + return Unpack (t, buf, 0, buf.Length); + } + + public object Unpack (Type t, byte[] buf, int offset, int size) + { + using (MemoryStream ms = new MemoryStream (buf, offset, size)) { + return Unpack (t, ms); + } + } + + public object Unpack (Type t, Stream strm) + { + throw new NotImplementedException (); + } + #endregion + + #region Compiled Packer Implementations + public abstract class PackerBase + { + Dictionary _packers = new Dictionary (); + Dictionary _unpackers = new Dictionary (); + + protected Dictionary _packMethods = new Dictionary (); + protected Dictionary _unpackMethods = new Dictionary (); + + protected PackerBase () + { + DefaultPackMethods.Register (_packMethods, _unpackMethods); + } + + public Action CreatePacker () + { + Delegate d; + lock (_packers) { + if (!_packers.TryGetValue (typeof (T), out d)) { + d = CreatePacker_Internal (); + _packers.Add (typeof (T), d); + } + } + return (Action)d; + } + + public Func CreateUnpacker () + { + Delegate d; + lock (_unpackers) { + if (!_unpackers.TryGetValue (typeof (T), out d)) { + d = CreateUnpacker_Internal (); + _unpackers.Add (typeof (T), d); + } + } + return (Func)d; + } + + protected abstract Action CreatePacker_Internal (); + protected abstract Func CreateUnpacker_Internal (); + } + public sealed class DynamicMethodPacker : PackerBase + { + private static MethodInfo LookupMemberMappingMethod; + static Dictionary> UnpackMemberMappings; + + static DynamicMethodPacker () + { + UnpackMemberMappings = new Dictionary> (); + LookupMemberMappingMethod = typeof (DynamicMethodPacker).GetMethod ("LookupMemberMapping", BindingFlags.Static | BindingFlags.NonPublic); + } + + public DynamicMethodPacker () : base () + { + } + + protected override Action CreatePacker_Internal () + { + DynamicMethod dm = CreatePacker (typeof (T), CreatePackDynamicMethod (typeof (T))); + return (Action)dm.CreateDelegate (typeof (Action)); + } + + protected override Func CreateUnpacker_Internal () + { + DynamicMethod dm = CreateUnpacker (typeof (T), CreateUnpackDynamicMethod (typeof (T))); + return (Func)dm.CreateDelegate (typeof (Func)); + } + + DynamicMethod CreatePacker (Type t, DynamicMethod dm) + { + ILGenerator il = dm.GetILGenerator (); + _packMethods.Add (t, dm); + PackILGenerator.EmitPackCode (t, dm, il, LookupMembers, FormatMemberName, LookupPackMethod); + return dm; + } + + DynamicMethod CreateUnpacker (Type t, DynamicMethod dm) + { + ILGenerator il = dm.GetILGenerator (); + _unpackMethods.Add (t, dm); + PackILGenerator.EmitUnpackCode (t, dm, il, LookupMembers, FormatMemberName, LookupUnpackMethod, + LookupMemberMapping, LookupMemberMappingMethod); + return dm; + } + + static DynamicMethod CreatePackDynamicMethod (Type t) + { + return CreateDynamicMethod (typeof (void), new Type[] {typeof (MsgPackWriter), t}); + } + + static DynamicMethod CreateUnpackDynamicMethod (Type t) + { + return CreateDynamicMethod (t, new Type[] {typeof (MsgPackReader)}); + } + + static MemberInfo[] LookupMembers (Type t) + { + BindingFlags baseFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; + System.Collections.Generic.List list = new System.Collections.Generic.List (); + list.AddRange (t.GetFields (baseFlags)); + // TODO: Add NonSerialized Attribute Filter ? + return list.ToArray (); + } + + MethodInfo LookupPackMethod (Type t) + { + MethodInfo mi; + DynamicMethod dm; + if (_packMethods.TryGetValue (t, out mi)) + return mi; + dm = CreatePackDynamicMethod (t); + return CreatePacker (t, dm); + } + + MethodInfo LookupUnpackMethod (Type t) + { + MethodInfo mi; + if (_unpackMethods.TryGetValue (t, out mi)) + return mi; + DynamicMethod dm = CreateUnpackDynamicMethod (t); + return CreateUnpacker (t, dm); + } + + static string FormatMemberName (MemberInfo m) + { + if (m.MemberType != MemberTypes.Field) + return m.Name; + + int pos; + string name = m.Name; + if (name[0] == '<' && (pos = name.IndexOf ('>')) > 1) + name = name.Substring (1, pos - 1); // Auto-Property (\<.+\>) + return name; + } + + static int _dynamicMethodIdx = 0; + static DynamicMethod CreateDynamicMethod (Type returnType, Type[] parameterTypes) + { + string name = "_" + Interlocked.Increment (ref _dynamicMethodIdx).ToString (); + return new DynamicMethod (name, returnType, parameterTypes, true); + } + + internal static IDictionary LookupMemberMapping (Type t) + { + IDictionary mapping; + lock (UnpackMemberMappings) { + if (!UnpackMemberMappings.TryGetValue (t, out mapping)) { + mapping = new Dictionary (); + UnpackMemberMappings.Add (t, mapping); + } + } + return mapping; + } + } + public sealed class MethodBuilderPacker : PackerBase + { + public const string AssemblyName = "MessagePackInternalAssembly"; + static AssemblyName DynamicAsmName; + static AssemblyBuilder DynamicAsmBuilder; + static ModuleBuilder DynamicModuleBuilder; + + private static MethodInfo LookupMemberMappingMethod; + static Dictionary> UnpackMemberMappings; + + static MethodBuilderPacker () + { + UnpackMemberMappings = new Dictionary> (); + LookupMemberMappingMethod = typeof (MethodBuilderPacker).GetMethod ("LookupMemberMapping", BindingFlags.Static | BindingFlags.NonPublic); + + DynamicAsmName = new AssemblyName (AssemblyName); + DynamicAsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly (DynamicAsmName, AssemblyBuilderAccess.Run); + DynamicModuleBuilder = DynamicAsmBuilder.DefineDynamicModule (DynamicAsmName.Name); + } + + public MethodBuilderPacker () : base () + { + } + + protected override Action CreatePacker_Internal () + { + TypeBuilder tb; + MethodBuilder mb; + CreatePackMethodBuilder (typeof (T), out tb, out mb); + _packMethods.Add (typeof (T), mb); + CreatePacker (typeof (T), mb); + MethodInfo mi = ToCallableMethodInfo (typeof (T), tb, true); + return (Action)Delegate.CreateDelegate (typeof (Action), mi); + } + + protected override Func CreateUnpacker_Internal () + { + TypeBuilder tb; + MethodBuilder mb; + CreateUnpackMethodBuilder (typeof (T), out tb, out mb); + _unpackMethods.Add (typeof (T), mb); + CreateUnpacker (typeof (T), mb); + MethodInfo mi = ToCallableMethodInfo (typeof (T), tb, false); + return (Func)Delegate.CreateDelegate (typeof (Func), mi); + } + + void CreatePacker (Type t, MethodBuilder mb) + { + ILGenerator il = mb.GetILGenerator (); + PackILGenerator.EmitPackCode (t, mb, il, LookupMembers, FormatMemberName, LookupPackMethod); + } + + void CreateUnpacker (Type t, MethodBuilder mb) + { + ILGenerator il = mb.GetILGenerator (); + PackILGenerator.EmitUnpackCode (t, mb, il, LookupMembers, FormatMemberName, LookupUnpackMethod, + LookupMemberMapping, LookupMemberMappingMethod); + } + + MethodInfo ToCallableMethodInfo (Type t, TypeBuilder tb, bool isPacker) + { + Type type = tb.CreateType (); + MethodInfo mi = type.GetMethod (isPacker ? "Pack" : "Unpack", BindingFlags.Static | BindingFlags.Public); + if (isPacker) { + _packMethods[t] = mi; + } else { + _unpackMethods[t] = mi; + } + return mi; + } + + MethodInfo LookupPackMethod (Type t) + { + MethodInfo mi; + TypeBuilder tb; + MethodBuilder mb; + if (_packMethods.TryGetValue (t, out mi)) + return mi; + CreatePackMethodBuilder (t, out tb, out mb); + _packMethods.Add (t, mb); + CreatePacker (t, mb); + return ToCallableMethodInfo (t, tb, true); + } + + MethodInfo LookupUnpackMethod (Type t) + { + MethodInfo mi; + TypeBuilder tb; + MethodBuilder mb; + if (_unpackMethods.TryGetValue (t, out mi)) + return mi; + CreateUnpackMethodBuilder (t, out tb, out mb); + _unpackMethods.Add (t, mb); + CreateUnpacker (t, mb); + return ToCallableMethodInfo (t, tb, false); + } + + static string FormatMemberName (MemberInfo m) + { + return m.Name; + } + + static MemberInfo[] LookupMembers (Type t) + { + BindingFlags baseFlags = BindingFlags.Instance | BindingFlags.Public; + System.Collections.Generic.List list = new System.Collections.Generic.List (); + list.AddRange (t.GetFields (baseFlags)); + // TODO: Add NonSerialized Attribute Filter ? + return list.ToArray (); + } + + static void CreatePackMethodBuilder (Type t, out TypeBuilder tb, out MethodBuilder mb) + { + tb = DynamicModuleBuilder.DefineType (t.Name + "PackerType", TypeAttributes.Public); + mb = tb.DefineMethod ("Pack", MethodAttributes.Static | MethodAttributes.Public, typeof (void), new Type[] {typeof (MsgPackWriter), t}); + } + + static void CreateUnpackMethodBuilder (Type t, out TypeBuilder tb, out MethodBuilder mb) + { + tb = DynamicModuleBuilder.DefineType (t.Name + "UnpackerType", TypeAttributes.Public); + mb = tb.DefineMethod ("Unpack", MethodAttributes.Static | MethodAttributes.Public, t, new Type[] {typeof (MsgPackReader)}); + } + + internal static IDictionary LookupMemberMapping (Type t) + { + IDictionary mapping; + lock (UnpackMemberMappings) { + if (!UnpackMemberMappings.TryGetValue (t, out mapping)) { + mapping = new Dictionary (); + UnpackMemberMappings.Add (t, mapping); + } + } + return mapping; + } + } + #endregion + + #region default pack/unpack methods + internal static class DefaultPackMethods + { + public static void Register (Dictionary packMethods, Dictionary unpackMethods) + { + RegisterPackMethods (packMethods); + RegisterUnpackMethods (unpackMethods); + } + + #region Pack + static void RegisterPackMethods (Dictionary packMethods) + { + Type type = typeof (DefaultPackMethods); + MethodInfo[] methods = type.GetMethods (BindingFlags.Static | BindingFlags.NonPublic); + string methodName = "Pack"; + for (int i = 0; i < methods.Length; i ++) { + if (!methodName.Equals (methods[i].Name)) + continue; + ParameterInfo[] parameters = methods[i].GetParameters (); + if (parameters.Length != 2 || parameters[0].ParameterType != typeof (MsgPackWriter)) + continue; + packMethods.Add (parameters[1].ParameterType, methods[i]); + } + } + + internal static void Pack (MsgPackWriter writer, string x) + { + if (x == null) { + writer.WriteNil (); + } else { + writer.Write (x, false); + } + } + #endregion + + #region Unpack + static void RegisterUnpackMethods (Dictionary unpackMethods) + { + BindingFlags flags = BindingFlags.Static | BindingFlags.NonPublic; + Type type = typeof (DefaultPackMethods); + MethodInfo mi = type.GetMethod ("Unpack_Signed", flags); + unpackMethods.Add (typeof (sbyte), mi); + unpackMethods.Add (typeof (short), mi); + unpackMethods.Add (typeof (int), mi); + + mi = type.GetMethod ("Unpack_Signed64", flags); + unpackMethods.Add (typeof (long), mi); + + mi = type.GetMethod ("Unpack_Unsigned", flags); + unpackMethods.Add (typeof (byte), mi); + unpackMethods.Add (typeof (ushort), mi); + unpackMethods.Add (typeof (char), mi); + unpackMethods.Add (typeof (uint), mi); + + mi = type.GetMethod ("Unpack_Unsigned64", flags); + unpackMethods.Add (typeof (ulong), mi); + + mi = type.GetMethod ("Unpack_Boolean", flags); + unpackMethods.Add (typeof (bool), mi); + + mi = type.GetMethod ("Unpack_Float", flags); + unpackMethods.Add (typeof (float), mi); + + mi = type.GetMethod ("Unpack_Double", flags); + unpackMethods.Add (typeof (double), mi); + + mi = type.GetMethod ("Unpack_String", flags); + unpackMethods.Add (typeof (string), mi); + } + + internal static int Unpack_Signed (MsgPackReader reader) + { + if (!reader.Read () || !reader.IsSigned ()) + UnpackFailed (); + return reader.ValueSigned; + } + + internal static long Unpack_Signed64 (MsgPackReader reader) + { + if (!reader.Read ()) + UnpackFailed (); + if (reader.IsSigned ()) + return reader.ValueSigned; + if (reader.IsSigned64 ()) + return reader.ValueSigned64; + UnpackFailed (); + return 0; // unused + } + + internal static uint Unpack_Unsigned (MsgPackReader reader) + { + if (!reader.Read () || !reader.IsUnsigned ()) + UnpackFailed (); + return reader.ValueUnsigned; + } + + internal static ulong Unpack_Unsigned64 (MsgPackReader reader) + { + if (!reader.Read ()) + UnpackFailed (); + if (reader.IsUnsigned ()) + return reader.ValueUnsigned; + if (reader.IsUnsigned64 ()) + return reader.ValueUnsigned64; + UnpackFailed (); + return 0; // unused + } + + internal static bool Unpack_Boolean (MsgPackReader reader) + { + if (!reader.Read () || !reader.IsBoolean ()) + UnpackFailed (); + return reader.ValueBoolean; + } + + internal static float Unpack_Float (MsgPackReader reader) + { + if (!reader.Read () || reader.Type != TypePrefixes.Float) + UnpackFailed (); + return reader.ValueFloat; + } + + internal static double Unpack_Double (MsgPackReader reader) + { + if (!reader.Read () || reader.Type != TypePrefixes.Double) + UnpackFailed (); + return reader.ValueDouble; + } + + internal static string Unpack_String (MsgPackReader reader) + { + if (!reader.Read () || !reader.IsRaw ()) + UnpackFailed (); + return reader.ReadRawString (); + } + + internal static void UnpackFailed () + { + throw new FormatException (); + } + #endregion + } + #endregion + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/CompiledPacker.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/CompiledPacker.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8faab5bc2c44e434ca26679316f75cdb +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6ac6bb9d43df8d64fa50aaa3b8ce1ce5 +folderAsset: yes +timeCreated: 1477164443 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/EmitExtensions.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/EmitExtensions.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,191 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Reflection; +using System.Reflection.Emit; + +namespace MsgPack.Compiler +{ + public static class EmitExtensions + { + public static void EmitLd (this ILGenerator il, Variable v) + { + switch (v.VarType) { + case VariableType.Arg: + EmitLdarg (il, v); + break; + case VariableType.Local: + EmitLdloc (il, v); + break; + default: + throw new ArgumentException (); + } + } + + public static void EmitLd (this ILGenerator il, params Variable[] list) + { + for (int i = 0; i < list.Length; i ++) + EmitLd (il, list[i]); + } + + public static void EmitLdarg (this ILGenerator il, Variable v) + { + if (v.VarType != VariableType.Arg) + throw new ArgumentException (); + + switch (v.Index) { + case 0: il.Emit (OpCodes.Ldarg_0); return; + case 1: il.Emit (OpCodes.Ldarg_1); return; + case 2: il.Emit (OpCodes.Ldarg_2); return; + case 3: il.Emit (OpCodes.Ldarg_3); return; + } + if (v.Index <= byte.MaxValue) { + il.Emit (OpCodes.Ldarg_S, (byte)v.Index); + } else if (v.Index <= short.MaxValue) { + il.Emit (OpCodes.Ldarg, v.Index); + } else { + throw new FormatException (); + } + } + + public static void EmitLdloc (this ILGenerator il, Variable v) + { + if (v.VarType != VariableType.Local) + throw new ArgumentException (); + + switch (v.Index) { + case 0: il.Emit (OpCodes.Ldloc_0); return; + case 1: il.Emit (OpCodes.Ldloc_1); return; + case 2: il.Emit (OpCodes.Ldloc_2); return; + case 3: il.Emit (OpCodes.Ldloc_3); return; + } + if (v.Index <= byte.MaxValue) { + il.Emit (OpCodes.Ldloc_S, (byte)v.Index); + } else if (v.Index <= short.MaxValue) { + il.Emit (OpCodes.Ldloc, v.Index); + } else { + throw new FormatException (); + } + } + + public static void EmitSt (this ILGenerator il, Variable v) + { + switch (v.VarType) { + case VariableType.Arg: + EmitStarg (il, v); + break; + case VariableType.Local: + EmitStloc (il, v); + break; + default: + throw new ArgumentException (); + } + } + + public static void EmitStarg (this ILGenerator il, Variable v) + { + if (v.VarType != VariableType.Arg) + throw new ArgumentException (); + + if (v.Index <= byte.MaxValue) { + il.Emit (OpCodes.Starg_S, (byte)v.Index); + } else if (v.Index <= short.MaxValue) { + il.Emit (OpCodes.Starg, v.Index); + } else { + throw new FormatException (); + } + } + + public static void EmitStloc (this ILGenerator il, Variable v) + { + if (v.VarType != VariableType.Local) + throw new ArgumentException (); + + switch (v.Index) { + case 0: il.Emit (OpCodes.Stloc_0); return; + case 1: il.Emit (OpCodes.Stloc_1); return; + case 2: il.Emit (OpCodes.Stloc_2); return; + case 3: il.Emit (OpCodes.Stloc_3); return; + } + if (v.Index <= byte.MaxValue) { + il.Emit (OpCodes.Stloc_S, (byte)v.Index); + } else if (v.Index <= short.MaxValue) { + il.Emit (OpCodes.Stloc, v.Index); + } else { + throw new FormatException (); + } + } + + public static void EmitLdc (this ILGenerator il, int v) + { + switch (v) { + case 0: il.Emit (OpCodes.Ldc_I4_0); return; + case 1: il.Emit (OpCodes.Ldc_I4_1); return; + case 2: il.Emit (OpCodes.Ldc_I4_2); return; + case 3: il.Emit (OpCodes.Ldc_I4_3); return; + case 4: il.Emit (OpCodes.Ldc_I4_4); return; + case 5: il.Emit (OpCodes.Ldc_I4_5); return; + case 6: il.Emit (OpCodes.Ldc_I4_6); return; + case 7: il.Emit (OpCodes.Ldc_I4_7); return; + case 8: il.Emit (OpCodes.Ldc_I4_8); return; + case -1: il.Emit (OpCodes.Ldc_I4_M1); return; + } + if (v <= sbyte.MaxValue && v >= sbyte.MinValue) { + il.Emit (OpCodes.Ldc_I4_S, (sbyte)v); + } else { + il.Emit (OpCodes.Ldc_I4, v); + } + } + + public static void EmitLd_False (this ILGenerator il) + { + il.Emit (OpCodes.Ldc_I4_1); + } + + public static void EmitLd_True (this ILGenerator il) + { + il.Emit (OpCodes.Ldc_I4_1); + } + + public static void EmitLdstr (this ILGenerator il, string v) + { + il.Emit (OpCodes.Ldstr, v); + } + + public static void EmitLdMember (this ILGenerator il, MemberInfo m) + { + if (m.MemberType == MemberTypes.Field) { + il.Emit (OpCodes.Ldfld, (FieldInfo)m); + } else if (m.MemberType == MemberTypes.Property) { + il.Emit (OpCodes.Callvirt, ((PropertyInfo)m).GetGetMethod (true)); + } else { + throw new ArgumentException (); + } + } + + public static void EmitStMember (this ILGenerator il, MemberInfo m) + { + if (m.MemberType == MemberTypes.Field) { + il.Emit (OpCodes.Stfld, (FieldInfo)m); + } else if (m.MemberType == MemberTypes.Property) { + il.Emit (OpCodes.Callvirt, ((PropertyInfo)m).GetSetMethod (true)); + } else { + throw new ArgumentException (); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/EmitExtensions.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/EmitExtensions.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 25568e12b4722ff418067d5e16eb81ba +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/PackILGenerator.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/PackILGenerator.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,386 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.Serialization; + +namespace MsgPack.Compiler +{ + static class PackILGenerator + { + #region Pack IL Generator + public static void EmitPackCode (Type type, MethodInfo mi, ILGenerator il, + Func targetMemberSelector, + Func memberNameFormatter, + Func lookupPackMethod) + { + if (type.IsPrimitive || type.IsInterface) + throw new NotSupportedException (); + + Variable arg_writer = Variable.CreateArg (0); + Variable arg_obj = Variable.CreateArg (1); + Variable local_i = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + + if (!type.IsValueType) { // null check + Label notNullLabel = il.DefineLabel (); + il.EmitLd (arg_obj); + il.Emit (OpCodes.Brtrue_S, notNullLabel); + il.EmitLd (arg_writer); + il.Emit (OpCodes.Call, typeof(MsgPackWriter).GetMethod("WriteNil", new Type[0])); + il.Emit (OpCodes.Ret); + il.MarkLabel (notNullLabel); + } + + if (type.IsArray) { + EmitPackArrayCode (mi, il, type, arg_writer, arg_obj, local_i, lookupPackMethod); + goto FinallyProcess; + } + + // MsgPackWriter.WriteMapHeader + MemberInfo[] members = targetMemberSelector (type); + il.EmitLd (arg_writer); + il.EmitLdc (members.Length); + il.Emit (OpCodes.Callvirt, typeof (MsgPackWriter).GetMethod("WriteMapHeader", new Type[]{typeof (int)})); + + for (int i = 0; i < members.Length; i ++) { + MemberInfo m = members[i]; + Type mt = m.GetMemberType (); + + // write field-name + il.EmitLd (arg_writer); + il.EmitLdstr (memberNameFormatter (m)); + il.EmitLd_True (); + il.Emit (OpCodes.Call, typeof (MsgPackWriter).GetMethod("Write", new Type[]{typeof (string), typeof (bool)})); + + // write value + EmitPackMemberValueCode (mt, il, arg_writer, arg_obj, m, null, type, mi, lookupPackMethod); + } + +FinallyProcess: + il.Emit (OpCodes.Ret); + } + + static void EmitPackArrayCode (MethodInfo mi, ILGenerator il, Type t, Variable var_writer, Variable var_obj, Variable var_loop, Func lookupPackMethod) + { + Type et = t.GetElementType (); + il.EmitLd (var_writer, var_obj); + il.Emit (OpCodes.Ldlen); + il.Emit (OpCodes.Call, typeof(MsgPackWriter).GetMethod("WriteArrayHeader", new Type[]{ typeof(int) })); + + Label beginLabel = il.DefineLabel (); + Label exprLabel = il.DefineLabel (); + + // for-loop: init loop counter + il.EmitLdc (0); + il.EmitSt (var_loop); + + // jump + il.Emit (OpCodes.Br_S, exprLabel); + + // mark begin-label + il.MarkLabel (beginLabel); + + // write element + EmitPackMemberValueCode (et, il, var_writer, var_obj, null, var_loop, t, mi, lookupPackMethod); + + // increment loop-counter + il.EmitLd (var_loop); + il.Emit (OpCodes.Ldc_I4_1); + il.Emit (OpCodes.Add); + il.EmitSt (var_loop); + + // mark expression label + il.MarkLabel (exprLabel); + + // expression + il.EmitLd (var_loop, var_obj); + il.Emit (OpCodes.Ldlen); + il.Emit (OpCodes.Blt_S, beginLabel); + } + + /// (optional) + /// (optional) + static void EmitPackMemberValueCode (Type type, ILGenerator il, Variable var_writer, Variable var_obj, + MemberInfo m, Variable elementIdx, Type currentType, MethodInfo currentMethod, Func lookupPackMethod) + { + MethodInfo mi; + il.EmitLd (var_writer, var_obj); + if (m != null) + il.EmitLdMember (m); + if (elementIdx != null) { + il.EmitLd (elementIdx); + il.Emit (OpCodes.Ldelem, type); + } + if (type.IsPrimitive) { + mi = typeof(MsgPackWriter).GetMethod("Write", new Type[]{type}); + } else { + if (currentType == type) { + mi = currentMethod; + } else { + mi = lookupPackMethod (type); + } + } + il.Emit (OpCodes.Call, mi); + } + #endregion + + #region Unpack IL Generator + public static void EmitUnpackCode (Type type, MethodInfo mi, ILGenerator il, + Func targetMemberSelector, + Func memberNameFormatter, + Func lookupUnpackMethod, + Func> lookupMemberMapping, + MethodInfo lookupMemberMappingMethod) + { + if (type.IsArray) { + EmitUnpackArrayCode (type, mi, il, targetMemberSelector, memberNameFormatter, lookupUnpackMethod); + } else { + EmitUnpackMapCode (type, mi, il, targetMemberSelector, memberNameFormatter, lookupUnpackMethod, lookupMemberMapping, lookupMemberMappingMethod); + } + } + + static void EmitUnpackMapCode (Type type, MethodInfo mi, ILGenerator il, + Func targetMemberSelector, + Func memberNameFormatter, + Func lookupUnpackMethod, + Func> lookupMemberMapping, + MethodInfo lookupMemberMappingMethod) + { + MethodInfo failedMethod = typeof (PackILGenerator).GetMethod ("UnpackFailed", BindingFlags.Static | BindingFlags.NonPublic); + MemberInfo[] members = targetMemberSelector (type); + IDictionary member_mapping = lookupMemberMapping (type); + for (int i = 0; i < members.Length; i ++) + member_mapping.Add (memberNameFormatter (members[i]), i); + + Variable msgpackReader = Variable.CreateArg (0); + Variable obj = Variable.CreateLocal (il.DeclareLocal (type)); + Variable num_of_fields = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + Variable loop_idx = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + Variable mapping = Variable.CreateLocal (il.DeclareLocal (typeof (IDictionary))); + Variable switch_idx = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + Variable var_type = Variable.CreateLocal (il.DeclareLocal (typeof (Type))); + + // if (!MsgPackReader.Read()) UnpackFailed (); + // if (MsgPackReader.Type == TypePrefixes.Nil) return null; + // if (!MsgPackReader.IsMap ()) UnpackFailed (); + EmitUnpackReadAndTypeCheckCode (il, msgpackReader, typeof (MsgPackReader).GetMethod ("IsMap"), failedMethod, true); + + // type = typeof (T) + il.Emit (OpCodes.Ldtoken, type); + il.Emit (OpCodes.Call, typeof(Type).GetMethod ("GetTypeFromHandle")); + il.EmitSt (var_type); + + // mapping = LookupMemberMapping (typeof (T)) + il.EmitLd (var_type); + il.Emit (OpCodes.Call, lookupMemberMappingMethod); + il.EmitSt (mapping); + + // object o = FormatterServices.GetUninitializedObject (Type); + il.EmitLd (var_type); + il.Emit (OpCodes.Call, typeof (FormatterServices).GetMethod ("GetUninitializedObject")); + il.Emit (OpCodes.Castclass, type); + il.EmitSt (obj); + + // num_of_fields = (int)reader.Length + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeof (MsgPackReader).GetProperty ("Length").GetGetMethod ()); + il.EmitSt (num_of_fields); + + // Loop labels + Label lblLoopStart = il.DefineLabel (); + Label lblLoopExpr = il.DefineLabel (); + + // i = 0; + il.EmitLdc (0); + il.EmitSt (loop_idx); + il.Emit (OpCodes.Br, lblLoopExpr); + il.MarkLabel (lblLoopStart); + + /* process */ + // if (!MsgPackReader.Read() || !MsgPackReader.IsRaw()) UnpackFailed(); + EmitUnpackReadAndTypeCheckCode (il, msgpackReader, typeof (MsgPackReader).GetMethod ("IsRaw"), failedMethod, false); + + // MsgPackReader.ReadRawString () + // if (!Dictionary.TryGetValue (,)) UnpackFailed(); + Label lbl3 = il.DefineLabel (); + il.EmitLd (mapping); + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeof (MsgPackReader).GetMethod ("ReadRawString", new Type[0])); + il.Emit (OpCodes.Ldloca_S, (byte)switch_idx.Index); + il.Emit (OpCodes.Callvirt, typeof (IDictionary).GetMethod ("TryGetValue")); + il.Emit (OpCodes.Brtrue, lbl3); + il.Emit (OpCodes.Call, failedMethod); + il.MarkLabel (lbl3); + + // switch + Label[] switchCases = new Label[members.Length]; + for (int i = 0; i < switchCases.Length; i ++) + switchCases[i] = il.DefineLabel (); + Label switchCaseEndLabel = il.DefineLabel (); + il.EmitLd (switch_idx); + il.Emit (OpCodes.Switch, switchCases); + il.Emit (OpCodes.Call, failedMethod); + + for (int i = 0; i < switchCases.Length; i ++) { + il.MarkLabel (switchCases[i]); + MemberInfo minfo = members[i]; + Type mt = minfo.GetMemberType (); + MethodInfo unpack_method = lookupUnpackMethod (mt); + il.EmitLd (obj); + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, unpack_method); + il.EmitStMember (minfo); + il.Emit (OpCodes.Br, switchCaseEndLabel); + } + il.MarkLabel (switchCaseEndLabel); + + // i ++ + il.EmitLd (loop_idx); + il.EmitLdc (1); + il.Emit (OpCodes.Add); + il.EmitSt (loop_idx); + + // i < num_of_fields; + il.MarkLabel (lblLoopExpr); + il.EmitLd (loop_idx); + il.EmitLd (num_of_fields); + il.Emit (OpCodes.Blt, lblLoopStart); + + // return + il.EmitLd (obj); + il.Emit (OpCodes.Ret); + } + + static void EmitUnpackArrayCode (Type arrayType, MethodInfo mi, ILGenerator il, + Func targetMemberSelector, + Func memberNameFormatter, + Func lookupUnpackMethod) + { + Type elementType = arrayType.GetElementType (); + MethodInfo failedMethod = typeof (PackILGenerator).GetMethod ("UnpackFailed", BindingFlags.Static | BindingFlags.NonPublic); + + Variable msgpackReader = Variable.CreateArg (0); + Variable obj = Variable.CreateLocal (il.DeclareLocal (arrayType)); + Variable num_of_elements = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + Variable loop_idx = Variable.CreateLocal (il.DeclareLocal (typeof (int))); + Variable type = Variable.CreateLocal (il.DeclareLocal (typeof (Type))); + + // if (!MsgPackReader.Read() || !MsgPackReader.IsArray ()) UnpackFailed (); + EmitUnpackReadAndTypeCheckCode (il, msgpackReader, typeof (MsgPackReader).GetMethod ("IsArray"), failedMethod, true); + + // type = typeof (T) + il.Emit (OpCodes.Ldtoken, elementType); + il.Emit (OpCodes.Call, typeof(Type).GetMethod ("GetTypeFromHandle")); + il.EmitSt (type); + + // num_of_elements = (int)reader.Length + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeof (MsgPackReader).GetProperty ("Length").GetGetMethod ()); + il.EmitSt (num_of_elements); + + // object o = Array.CreateInstance (Type, Length); + il.EmitLd (type); + il.EmitLd (num_of_elements); + il.Emit (OpCodes.Call, typeof (Array).GetMethod ("CreateInstance", new Type[] {typeof (Type), typeof (int)})); + il.Emit (OpCodes.Castclass, arrayType); + il.EmitSt (obj); + + // Unpack element method + MethodInfo unpack_method = lookupUnpackMethod (elementType); + + // Loop labels + Label lblLoopStart = il.DefineLabel (); + Label lblLoopExpr = il.DefineLabel (); + + // i = 0; + il.EmitLdc (0); + il.EmitSt (loop_idx); + il.Emit (OpCodes.Br, lblLoopExpr); + il.MarkLabel (lblLoopStart); + + /* process */ + il.EmitLd (obj, loop_idx); + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, unpack_method); + il.Emit (OpCodes.Stelem, elementType); + + // i ++ + il.EmitLd (loop_idx); + il.EmitLdc (1); + il.Emit (OpCodes.Add); + il.EmitSt (loop_idx); + + // i < num_of_fields; + il.MarkLabel (lblLoopExpr); + il.EmitLd (loop_idx); + il.EmitLd (num_of_elements); + il.Emit (OpCodes.Blt, lblLoopStart); + + // return + il.EmitLd (obj); + il.Emit (OpCodes.Ret); + } + + static void EmitUnpackReadAndTypeCheckCode (ILGenerator il, Variable msgpackReader, MethodInfo typeCheckMethod, MethodInfo failedMethod, bool nullCheckAndReturn) + { + Label lblFailed = il.DefineLabel (); + Label lblNullReturn = nullCheckAndReturn ? il.DefineLabel () : default(Label); + Label lblPassed = il.DefineLabel (); + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeof (MsgPackReader).GetMethod ("Read")); + il.Emit (OpCodes.Brfalse_S, lblFailed); + if (nullCheckAndReturn) { + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeof (MsgPackReader).GetProperty ("Type").GetGetMethod ()); + il.EmitLdc ((int)TypePrefixes.Nil); + il.Emit (OpCodes.Beq_S, lblNullReturn); + } + il.EmitLd (msgpackReader); + il.Emit (OpCodes.Call, typeCheckMethod); + il.Emit (OpCodes.Brtrue_S, lblPassed); + il.Emit (OpCodes.Br, lblFailed); + if (nullCheckAndReturn) { + il.MarkLabel (lblNullReturn); + il.Emit (OpCodes.Ldnull); + il.Emit (OpCodes.Ret); + } + il.MarkLabel (lblFailed); + il.Emit (OpCodes.Call, failedMethod); + il.MarkLabel (lblPassed); + } + + /// Exception Helper + internal static void UnpackFailed () + { + throw new FormatException (); + } + #endregion + + #region Misc + static Type GetMemberType (this MemberInfo mi) + { + if (mi.MemberType == MemberTypes.Field) + return ((FieldInfo)mi).FieldType; + if (mi.MemberType == MemberTypes.Property) + return ((PropertyInfo)mi).PropertyType; + throw new ArgumentException (); + } + #endregion + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/PackILGenerator.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/PackILGenerator.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b04deedffaa18a04c8bf4295c96c5276 +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/Variable.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/Variable.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,42 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System.Reflection.Emit; + +namespace MsgPack.Compiler +{ + public class Variable + { + Variable (VariableType type, int index) + { + this.VarType = type; + this.Index = index; + } + + public static Variable CreateLocal (LocalBuilder local) + { + return new Variable (VariableType.Local, local.LocalIndex); + } + + public static Variable CreateArg (int idx) + { + return new Variable (VariableType.Arg, idx); + } + + public VariableType VarType { get; set; } + public int Index { get; set; } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/Variable.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/Variable.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e16f8ce97a8740d4ba0d3ab03ec929fa +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/VariableType.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/VariableType.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,24 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +namespace MsgPack.Compiler +{ + public enum VariableType + { + Local, + Arg + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/Compiler/VariableType.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/Compiler/VariableType.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 046af49fc8c276b418aaae10632826b5 +timeCreated: 1477164443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/MsgPackReader.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/MsgPackReader.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,258 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.IO; +using System.Text; + +namespace MsgPack +{ + public class MsgPackReader + { + Stream _strm; + byte[] _tmp0 = new byte[8]; + byte[] _tmp1 = new byte[8]; + + Encoding _encoding = Encoding.UTF8; + //Decoder _decoder = Encoding.UTF8.GetDecoder (); + byte[] _buf = new byte[64]; + + public MsgPackReader (Stream strm) + { + _strm = strm; + } + + public TypePrefixes Type { get; private set; } + + public bool ValueBoolean { get; private set; } + public uint Length { get; private set; } + + public uint ValueUnsigned { get; private set; } + public ulong ValueUnsigned64 { get; private set; } + + public int ValueSigned { get; private set; } + public long ValueSigned64 { get; private set; } + + public float ValueFloat { get; private set; } + public double ValueDouble { get; private set; } + + public bool IsSigned () + { + return this.Type == TypePrefixes.NegativeFixNum || + this.Type == TypePrefixes.PositiveFixNum || + this.Type == TypePrefixes.Int8 || + this.Type == TypePrefixes.Int16 || + this.Type == TypePrefixes.Int32; + } + + public bool IsBoolean () + { + return this.Type == TypePrefixes.True || this.Type == TypePrefixes.False; + } + + public bool IsSigned64 () + { + return this.Type == TypePrefixes.Int64; + } + + public bool IsUnsigned () + { + return this.Type == TypePrefixes.PositiveFixNum || + this.Type == TypePrefixes.UInt8 || + this.Type == TypePrefixes.UInt16 || + this.Type == TypePrefixes.UInt32; + } + + public bool IsUnsigned64 () + { + return this.Type == TypePrefixes.UInt64; + } + + public bool IsRaw () + { + return this.Type == TypePrefixes.FixRaw || this.Type == TypePrefixes.Raw16 || this.Type == TypePrefixes.Raw32; + } + + public bool IsArray () + { + return this.Type == TypePrefixes.FixArray || this.Type == TypePrefixes.Array16 || this.Type == TypePrefixes.Array32; + } + + public bool IsMap () + { + return this.Type == TypePrefixes.FixMap || this.Type == TypePrefixes.Map16 || this.Type == TypePrefixes.Map32; + } + + public bool Read () + { + byte[] tmp0 = _tmp0, tmp1 = _tmp1; + int x = _strm.ReadByte (); + if (x < 0) + return false; // EOS + + if (x >= 0x00 && x <= 0x7f) { + this.Type = TypePrefixes.PositiveFixNum; + } else if (x >= 0xe0 && x <= 0xff) { + this.Type = TypePrefixes.NegativeFixNum; + } else if (x >= 0xa0 && x <= 0xbf) { + this.Type = TypePrefixes.FixRaw; + } else if (x >= 0x90 && x <= 0x9f) { + this.Type = TypePrefixes.FixArray; + } else if (x >= 0x80 && x <= 0x8f) { + this.Type = TypePrefixes.FixMap; + } else { + this.Type = (TypePrefixes)x; + } + + switch (this.Type) { + case TypePrefixes.Nil: + break; + case TypePrefixes.False: + ValueBoolean = false; + break; + case TypePrefixes.True: + ValueBoolean = true; + break; + case TypePrefixes.Float: + _strm.Read (tmp0, 0, 4); + if (BitConverter.IsLittleEndian) { + tmp1[0] = tmp0[3]; + tmp1[1] = tmp0[2]; + tmp1[2] = tmp0[1]; + tmp1[3] = tmp0[0]; + ValueFloat = BitConverter.ToSingle (tmp1, 0); + } else { + ValueFloat = BitConverter.ToSingle (tmp0, 0); + } + break; + case TypePrefixes.Double: + _strm.Read (tmp0, 0, 8); + if (BitConverter.IsLittleEndian) { + tmp1[0] = tmp0[7]; + tmp1[1] = tmp0[6]; + tmp1[2] = tmp0[5]; + tmp1[3] = tmp0[4]; + tmp1[4] = tmp0[3]; + tmp1[5] = tmp0[2]; + tmp1[6] = tmp0[1]; + tmp1[7] = tmp0[0]; + ValueDouble = BitConverter.ToDouble (tmp1, 0); + } else { + ValueDouble = BitConverter.ToDouble (tmp0, 0); + } + break; + case TypePrefixes.NegativeFixNum: + ValueSigned = (x & 0x1f) - 0x20; + break; + case TypePrefixes.PositiveFixNum: + ValueSigned = x & 0x7f; + ValueUnsigned = (uint)ValueSigned; + break; + case TypePrefixes.UInt8: + x = _strm.ReadByte (); + if (x < 0) + throw new FormatException (); + ValueUnsigned = (uint)x; + break; + case TypePrefixes.UInt16: + if (_strm.Read (tmp0, 0, 2) != 2) + throw new FormatException (); + ValueUnsigned = ((uint)tmp0[0] << 8) | (uint)tmp0[1]; + break; + case TypePrefixes.UInt32: + if (_strm.Read (tmp0, 0, 4) != 4) + throw new FormatException (); + ValueUnsigned = ((uint)tmp0[0] << 24) | ((uint)tmp0[1] << 16) | ((uint)tmp0[2] << 8) | (uint)tmp0[3]; + break; + case TypePrefixes.UInt64: + if (_strm.Read (tmp0, 0, 8) != 8) + throw new FormatException (); + ValueUnsigned64 = ((ulong)tmp0[0] << 56) | ((ulong)tmp0[1] << 48) | ((ulong)tmp0[2] << 40) | ((ulong)tmp0[3] << 32) | ((ulong)tmp0[4] << 24) | ((ulong)tmp0[5] << 16) | ((ulong)tmp0[6] << 8) | (ulong)tmp0[7]; + break; + case TypePrefixes.Int8: + x = _strm.ReadByte (); + if (x < 0) + throw new FormatException (); + ValueSigned = (sbyte)x; + break; + case TypePrefixes.Int16: + if (_strm.Read (tmp0, 0, 2) != 2) + throw new FormatException (); + ValueSigned = (short)((tmp0[0] << 8) | tmp0[1]); + break; + case TypePrefixes.Int32: + if (_strm.Read (tmp0, 0, 4) != 4) + throw new FormatException (); + ValueSigned = (tmp0[0] << 24) | (tmp0[1] << 16) | (tmp0[2] << 8) | tmp0[3]; + break; + case TypePrefixes.Int64: + if (_strm.Read (tmp0, 0, 8) != 8) + throw new FormatException (); + ValueSigned64 = ((long)tmp0[0] << 56) | ((long)tmp0[1] << 48) | ((long)tmp0[2] << 40) | ((long)tmp0[3] << 32) | ((long)tmp0[4] << 24) | ((long)tmp0[5] << 16) | ((long)tmp0[6] << 8) | (long)tmp0[7]; + break; + case TypePrefixes.FixRaw: + Length = (uint)(x & 0x1f); + break; + case TypePrefixes.FixArray: + case TypePrefixes.FixMap: + Length = (uint)(x & 0xf); + break; + case TypePrefixes.Raw16: + case TypePrefixes.Array16: + case TypePrefixes.Map16: + if (_strm.Read (tmp0, 0, 2) != 2) + throw new FormatException (); + Length = ((uint)tmp0[0] << 8) | (uint)tmp0[1]; + break; + case TypePrefixes.Raw32: + case TypePrefixes.Array32: + case TypePrefixes.Map32: + if (_strm.Read (tmp0, 0, 4) != 4) + throw new FormatException (); + Length = ((uint)tmp0[0] << 24) | ((uint)tmp0[1] << 16) | ((uint)tmp0[2] << 8) | (uint)tmp0[3]; + break; + default: + throw new FormatException (); + } + return true; + } + + public int ReadValueRaw (byte[] buf, int offset, int count) + { + return _strm.Read (buf, offset, count); + } + + public string ReadRawString () + { + return ReadRawString (_buf); + } + + public string ReadRawString (byte[] buf) + { + if (this.Length < buf.Length) { + if (ReadValueRaw (buf, 0, (int)this.Length) != this.Length) + throw new FormatException (); + return _encoding.GetString (buf, 0, (int)this.Length); + } + + // Poor implementation + byte[] tmp = new byte[(int)this.Length]; + if (ReadValueRaw (tmp, 0, tmp.Length) != tmp.Length) + throw new FormatException (); + return _encoding.GetString (tmp); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/MsgPackReader.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/MsgPackReader.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ff57bb43a0eea9646b78dd44178c44f1 +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/MsgPackWriter.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/MsgPackWriter.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,321 @@ +// +// Copyright 2011 Kazuki Oikawa, Kazunari Kida +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.IO; +using System.Text; + +namespace MsgPack +{ + public class MsgPackWriter + { + Stream _strm; + //Encoding _encoding = Encoding.UTF8; + Encoder _encoder = Encoding.UTF8.GetEncoder (); + byte[] _tmp = new byte[9]; + byte[] _buf = new byte[64]; + + public MsgPackWriter (Stream strm) + { + _strm = strm; + } + + public void Write (byte x) + { + if (x < 128) { + _strm.WriteByte (x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xcc; + tmp[1] = x; + _strm.Write (tmp, 0, 2); + } + } + + public void Write (ushort x) + { + if (x < 0x100) { + Write ((byte)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xcd; + tmp[1] = (byte)(x >> 8); + tmp[2] = (byte)x; + _strm.Write (tmp, 0, 3); + } + } + + public void Write (char x) + { + Write ((ushort)x); + } + + public void Write (uint x) + { + if (x < 0x10000) { + Write ((ushort)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xce; + tmp[1] = (byte)(x >> 24); + tmp[2] = (byte)(x >> 16); + tmp[3] = (byte)(x >> 8); + tmp[4] = (byte)x; + _strm.Write (tmp, 0, 5); + } + } + + public void Write (ulong x) + { + if (x < 0x100000000) { + Write ((uint)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xcf; + tmp[1] = (byte)(x >> 56); + tmp[2] = (byte)(x >> 48); + tmp[3] = (byte)(x >> 40); + tmp[4] = (byte)(x >> 32); + tmp[5] = (byte)(x >> 24); + tmp[6] = (byte)(x >> 16); + tmp[7] = (byte)(x >> 8); + tmp[8] = (byte)x; + _strm.Write (tmp, 0, 9); + } + } + + public void Write (sbyte x) + { + if (x >= -32 && x <= -1) { + _strm.WriteByte ((byte)(0xe0 | (byte)x)); + } else if (x >= 0 && x <= 127) { + _strm.WriteByte ((byte)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xd0; + tmp[1] = (byte)x; + _strm.Write (tmp, 0, 2); + } + } + + public void Write (short x) + { + if (x >= sbyte.MinValue && x <= sbyte.MaxValue) { + Write ((sbyte)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xd1; + tmp[1] = (byte)(x >> 8); + tmp[2] = (byte)x; + _strm.Write (tmp, 0, 3); + } + } + + public void Write (int x) + { + if (x >= short.MinValue && x <= short.MaxValue) { + Write ((short)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xd2; + tmp[1] = (byte)(x >> 24); + tmp[2] = (byte)(x >> 16); + tmp[3] = (byte)(x >> 8); + tmp[4] = (byte)x; + _strm.Write (tmp, 0, 5); + } + } + + public void Write (long x) + { + if (x >= int.MinValue && x <= int.MaxValue) { + Write ((int)x); + } else { + byte[] tmp = _tmp; + tmp[0] = 0xd3; + tmp[1] = (byte)(x >> 56); + tmp[2] = (byte)(x >> 48); + tmp[3] = (byte)(x >> 40); + tmp[4] = (byte)(x >> 32); + tmp[5] = (byte)(x >> 24); + tmp[6] = (byte)(x >> 16); + tmp[7] = (byte)(x >> 8); + tmp[8] = (byte)x; + _strm.Write (tmp, 0, 9); + } + } + + public void WriteNil () + { + _strm.WriteByte (0xc0); + } + + public void Write (bool x) + { + _strm.WriteByte ((byte)(x ? 0xc3 : 0xc2)); + } + + public void Write (float x) + { + byte[] raw = BitConverter.GetBytes (x); // unsafeコードを使う? + byte[] tmp = _tmp; + + tmp[0] = 0xca; + if (BitConverter.IsLittleEndian) { + tmp[1] = raw[3]; + tmp[2] = raw[2]; + tmp[3] = raw[1]; + tmp[4] = raw[0]; + } else { + tmp[1] = raw[0]; + tmp[2] = raw[1]; + tmp[3] = raw[2]; + tmp[4] = raw[3]; + } + _strm.Write (tmp, 0, 5); + } + + public void Write (double x) + { + byte[] raw = BitConverter.GetBytes (x); // unsafeコードを使う? + byte[] tmp = _tmp; + + tmp[0] = 0xcb; + if (BitConverter.IsLittleEndian) { + tmp[1] = raw[7]; + tmp[2] = raw[6]; + tmp[3] = raw[5]; + tmp[4] = raw[4]; + tmp[5] = raw[3]; + tmp[6] = raw[2]; + tmp[7] = raw[1]; + tmp[8] = raw[0]; + } else { + tmp[1] = raw[0]; + tmp[2] = raw[1]; + tmp[3] = raw[2]; + tmp[4] = raw[3]; + tmp[5] = raw[4]; + tmp[6] = raw[5]; + tmp[7] = raw[6]; + tmp[8] = raw[7]; + } + _strm.Write (tmp, 0, 9); + } + + public void Write (byte[] bytes) + { + WriteRawHeader (bytes.Length); + _strm.Write (bytes, 0, bytes.Length); + } + + public void WriteRawHeader (int N) + { + WriteLengthHeader (N, 32, 0xa0, 0xda, 0xdb); + } + + public void WriteArrayHeader (int N) + { + WriteLengthHeader (N, 16, 0x90, 0xdc, 0xdd); + } + + public void WriteMapHeader (int N) + { + WriteLengthHeader (N, 16, 0x80, 0xde, 0xdf); + } + + void WriteLengthHeader (int N, int fix_length, byte fix_prefix, byte len16bit_prefix, byte len32bit_prefix) + { + if (N < fix_length) { + _strm.WriteByte ((byte)(fix_prefix | N)); + } else { + byte[] tmp = _tmp; + int header_len; + if (N < 0x10000) { + tmp[0] = len16bit_prefix; + tmp[1] = (byte)(N >> 8); + tmp[2] = (byte)N; + header_len = 3; + } else { + tmp[0] = len32bit_prefix; + tmp[1] = (byte)(N >> 24); + tmp[2] = (byte)(N >> 16); + tmp[3] = (byte)(N >> 8); + tmp[4] = (byte)N; + header_len = 5; + } + _strm.Write (tmp, 0, header_len); + } + } + + public void Write (string x) + { + Write (x, false); + } + + public void Write (string x, bool highProbAscii) + { + Write (x, _buf, highProbAscii); + } + + public void Write (string x, byte[] buf) + { + Write (x, buf, false); + } + + public void Write (string x, byte[] buf, bool highProbAscii) + { + Encoder encoder = _encoder; + //fixed (char *pstr = x) + //fixed (byte *pbuf = buf) { + char[] str = x.ToCharArray(); + if (highProbAscii && x.Length <= buf.Length) { + bool isAsciiFullCompatible = true; + for (int i = 0; i < x.Length; i ++) { + //int v = (int)pstr[i]; + int v = (int)(x[i]); + if (v > 0x7f) { + isAsciiFullCompatible = false; + break; + } + buf[i] = (byte)v; + } + if (isAsciiFullCompatible) { + WriteRawHeader (x.Length); + _strm.Write (buf, 0, x.Length); + return; + } + } + + //WriteRawHeader (encoder.GetByteCount (pstr, x.Length, true)); + WriteRawHeader (encoder.GetByteCount (str, 0, x.Length, true)); + int str_len = x.Length; + //char *p = pstr; + int convertedChars, bytesUsed; + bool completed = true; + int j = 0; + while (str_len > 0 || !completed) { + //encoder.Convert (p, str_len, pbuf, buf.Length, false, out convertedChars, out bytesUsed, out completed); + encoder.Convert (str, j, str_len, buf, 0, buf.Length, false, out convertedChars, out bytesUsed, out completed); + _strm.Write (buf, 0, bytesUsed); + str_len -= convertedChars; + //p += convertedChars; + j += convertedChars; + } + //} + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/MsgPackWriter.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/MsgPackWriter.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 10a1d40ab78473c4d9b6e3b60cb43452 +timeCreated: 1477164443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ObjectPacker.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ObjectPacker.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,259 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; + +namespace MsgPack +{ + public class ObjectPacker + { + byte[] _buf = new byte[64]; + //Encoding _encoding = Encoding.UTF8; + static Dictionary PackerMapping; + static Dictionary UnpackerMapping; + + delegate void PackDelegate (ObjectPacker packer, MsgPackWriter writer, object o); + delegate object UnpackDelegate (ObjectPacker packer, MsgPackReader reader); + + static ObjectPacker () + { + PackerMapping = new Dictionary (); + UnpackerMapping = new Dictionary (); + + PackerMapping.Add (typeof (string), StringPacker); + UnpackerMapping.Add (typeof (string), StringUnpacker); + } + + public byte[] Pack (object o) + { + using (MemoryStream ms = new MemoryStream ()) { + Pack (ms, o); + return ms.ToArray (); + } + } + + public void Pack (Stream strm, object o) + { + if (o != null && o.GetType ().IsPrimitive) + throw new NotSupportedException (); + MsgPackWriter writer = new MsgPackWriter (strm); + Pack (writer, o); + } + + void Pack (MsgPackWriter writer, object o) + { + if (o == null) { + writer.WriteNil (); + return; + } + + Type t = o.GetType (); + if (t.IsPrimitive) { + if (t.Equals (typeof (int))) writer.Write ((int)o); + else if (t.Equals (typeof (uint))) writer.Write ((uint)o); + else if (t.Equals (typeof (float))) writer.Write ((float)o); + else if (t.Equals (typeof (double))) writer.Write ((double)o); + else if (t.Equals (typeof (long))) writer.Write ((long)o); + else if (t.Equals (typeof (ulong))) writer.Write ((ulong)o); + else if (t.Equals (typeof (bool))) writer.Write ((bool)o); + else if (t.Equals (typeof (byte))) writer.Write ((byte)o); + else if (t.Equals (typeof (sbyte))) writer.Write ((sbyte)o); + else if (t.Equals (typeof (short))) writer.Write ((short)o); + else if (t.Equals (typeof (ushort))) writer.Write ((ushort)o); + else if (t.Equals (typeof (char))) writer.Write ((ushort)(char)o); + else throw new NotSupportedException (); + return; + } + + PackDelegate packer; + if (PackerMapping.TryGetValue (t, out packer)) { + packer (this, writer, o); + return; + } + + if (t.IsArray) { + Array ary = (Array)o; + writer.WriteArrayHeader (ary.Length); + for (int i = 0; i < ary.Length; i ++) + Pack (writer, ary.GetValue (i)); + return; + } + + ReflectionCacheEntry entry = ReflectionCache.Lookup (t); + writer.WriteMapHeader (entry.FieldMap.Count); + foreach (KeyValuePair pair in entry.FieldMap) { + writer.Write (pair.Key, _buf); + object v = pair.Value.GetValue (o); + if (pair.Value.FieldType.IsInterface && v != null) { + writer.WriteArrayHeader (2); + writer.Write (v.GetType().FullName); + } + Pack (writer, v); + } + } + + public T Unpack (byte[] buf) + { + return Unpack (buf, 0, buf.Length); + } + + public T Unpack (byte[] buf, int offset, int size) + { + using (MemoryStream ms = new MemoryStream (buf, offset, size)) { + return Unpack (ms); + } + } + + public T Unpack (Stream strm) + { + if (typeof (T).IsPrimitive) + throw new NotSupportedException (); + MsgPackReader reader = new MsgPackReader (strm); + return (T)Unpack (reader, typeof (T)); + } + + public object Unpack (Type type, byte[] buf) + { + return Unpack (type, buf, 0, buf.Length); + } + + public object Unpack (Type type, byte[] buf, int offset, int size) + { + using (MemoryStream ms = new MemoryStream (buf, offset, size)) { + return Unpack (type, ms); + } + } + + public object Unpack (Type type, Stream strm) + { + if (type.IsPrimitive) + throw new NotSupportedException (); + MsgPackReader reader = new MsgPackReader (strm); + return Unpack (reader, type); + } + + object Unpack (MsgPackReader reader, Type t) + { + if (t.IsPrimitive) { + if (!reader.Read ()) throw new FormatException (); + if (t.Equals (typeof (int)) && reader.IsSigned ()) return reader.ValueSigned; + else if (t.Equals (typeof (uint)) && reader.IsUnsigned ()) return reader.ValueUnsigned; + else if (t.Equals (typeof (float)) && reader.Type == TypePrefixes.Float) return reader.ValueFloat; + else if (t.Equals (typeof (double)) && reader.Type == TypePrefixes.Double) return reader.ValueDouble; + else if (t.Equals (typeof (long))) { + if (reader.IsSigned64 ()) + return reader.ValueSigned64; + if (reader.IsSigned ()) + return (long)reader.ValueSigned; + } else if (t.Equals (typeof (ulong))) { + if (reader.IsUnsigned64 ()) + return reader.ValueUnsigned64; + if (reader.IsUnsigned ()) + return (ulong)reader.ValueUnsigned; + } else if (t.Equals (typeof (bool)) && reader.IsBoolean ()) return (reader.Type == TypePrefixes.True); + else if (t.Equals (typeof (byte)) && reader.IsUnsigned ()) return (byte)reader.ValueUnsigned; + else if (t.Equals (typeof (sbyte)) && reader.IsSigned ()) return (sbyte)reader.ValueSigned; + else if (t.Equals (typeof (short)) && reader.IsSigned ()) return (short)reader.ValueSigned; + else if (t.Equals (typeof (ushort)) && reader.IsUnsigned ()) return (ushort)reader.ValueUnsigned; + else if (t.Equals (typeof (char)) && reader.IsUnsigned ()) return (char)reader.ValueUnsigned; + else throw new NotSupportedException (); + } + + UnpackDelegate unpacker; + if (UnpackerMapping.TryGetValue (t, out unpacker)) + return unpacker (this, reader); + + if (t.IsArray) { + if (!reader.Read () || (!reader.IsArray () && reader.Type != TypePrefixes.Nil)) + throw new FormatException (); + if (reader.Type == TypePrefixes.Nil) + return null; + Type et = t.GetElementType (); + Array ary = Array.CreateInstance (et, (int)reader.Length); + for (int i = 0; i < ary.Length; i ++) + ary.SetValue (Unpack (reader, et), i); + return ary; + } + + if (!reader.Read ()) + throw new FormatException (); + if (reader.Type == TypePrefixes.Nil) + return null; + if (t.IsInterface) { + if (reader.Type != TypePrefixes.FixArray && reader.Length != 2) + throw new FormatException (); + if (!reader.Read () || !reader.IsRaw ()) + throw new FormatException (); + CheckBufferSize ((int)reader.Length); + reader.ReadValueRaw (_buf, 0, (int)reader.Length); + t = Type.GetType (Encoding.UTF8.GetString (_buf, 0, (int)reader.Length)); + if (!reader.Read () || reader.Type == TypePrefixes.Nil) + throw new FormatException (); + } + if (!reader.IsMap ()) + throw new FormatException (); + + object o = FormatterServices.GetUninitializedObject (t); + ReflectionCacheEntry entry = ReflectionCache.Lookup (t); + int members = (int)reader.Length; + for (int i = 0; i < members; i ++) { + if (!reader.Read () || !reader.IsRaw ()) + throw new FormatException (); + CheckBufferSize ((int)reader.Length); + reader.ReadValueRaw (_buf, 0, (int)reader.Length); + string name = Encoding.UTF8.GetString (_buf, 0, (int)reader.Length); + FieldInfo f; + if (!entry.FieldMap.TryGetValue (name, out f)) + throw new FormatException (); + f.SetValue (o, Unpack (reader, f.FieldType)); + } + + IDeserializationCallback callback = o as IDeserializationCallback; + if (callback != null) + callback.OnDeserialization (this); + return o; + } + + void CheckBufferSize (int size) + { + if (_buf.Length < size) + Array.Resize (ref _buf, size); + } + + static void StringPacker (ObjectPacker packer, MsgPackWriter writer, object o) + { + writer.Write (Encoding.UTF8.GetBytes ((string)o)); + } + + static object StringUnpacker (ObjectPacker packer, MsgPackReader reader) + { + if (!reader.Read ()) + throw new FormatException (); + if (reader.Type == TypePrefixes.Nil) + return null; + if (!reader.IsRaw ()) + throw new FormatException (); + packer.CheckBufferSize ((int)reader.Length); + reader.ReadValueRaw (packer._buf, 0, (int)reader.Length); + return Encoding.UTF8.GetString (packer._buf, 0, (int)reader.Length); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ObjectPacker.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ObjectPacker.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12c727b7b1a5e7e4aa80713e6890f40a +timeCreated: 1477164443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ReflectionCache.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ReflectionCache.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,60 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections.Generic; + +namespace MsgPack +{ + public static class ReflectionCache + { + static Dictionary _cache; + + static ReflectionCache () + { + _cache = new Dictionary (); + } + + public static ReflectionCacheEntry Lookup (Type type) + { + ReflectionCacheEntry entry; + lock (_cache) { + if (_cache.TryGetValue (type, out entry)) + return entry; + } + + entry = new ReflectionCacheEntry (type); + lock (_cache) { + _cache[type] = entry; + } + return entry; + } + + public static void RemoveCache (Type type) + { + lock (_cache) { + _cache.Remove (type); + } + } + + public static void Clear () + { + lock (_cache) { + _cache.Clear (); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ReflectionCache.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ReflectionCache.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 02b548ab17290e4438e9930601dfcd48 +timeCreated: 1477164443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ReflectionCacheEntry.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ReflectionCacheEntry.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,44 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace MsgPack +{ + public class ReflectionCacheEntry + { + const BindingFlags FieldBindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.SetField; + + public ReflectionCacheEntry (Type t) + { + FieldInfo[] fields = t.GetFields (FieldBindingFlags); + IDictionary map = new Dictionary (fields.Length); + for (int i = 0; i < fields.Length; i ++) { + FieldInfo f = fields[i]; + string name = f.Name; + int pos; + if (name[0] == '<' && (pos = name.IndexOf ('>')) > 1) + name = name.Substring (1, pos - 1); // Auto-Property (\<.+\>) + map[name] = f; + } + FieldMap = map; + } + + public IDictionary FieldMap { get; private set; } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/ReflectionCacheEntry.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/ReflectionCacheEntry.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 168d5114c2615144d8a139ad0baf07d7 +timeCreated: 1477164443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/TypePrefixes.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/TypePrefixes.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,48 @@ +// +// Copyright 2011 Kazuki Oikawa +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +namespace MsgPack +{ + public enum TypePrefixes : byte + { + PositiveFixNum = 0x00, // 0x00 - 0x7f + NegativeFixNum = 0xe0, // 0xe0 - 0xff + + Nil = 0xc0, + False = 0xc2, + True = 0xc3, + Float = 0xca, + Double = 0xcb, + UInt8 = 0xcc, + UInt16 = 0xcd, + UInt32 = 0xce, + UInt64 = 0xcf, + Int8 = 0xd0, + Int16 = 0xd1, + Int32 = 0xd2, + Int64 = 0xd3, + Raw16 = 0xda, + Raw32 = 0xdb, + Array16 = 0xdc, + Array32 = 0xdd, + Map16 = 0xde, + Map32 = 0xdf, + + FixRaw = 0xa0, // 0xa0 - 0xbf + FixArray = 0x90, // 0x90 - 0x9f + FixMap = 0x80, // 0x80 - 0x8f + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/persistent/msgpack/src/TypePrefixes.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/persistent/msgpack/src/TypePrefixes.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a842a9b0e71f967429ef3fbcedabae00 +timeCreated: 1477164444 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2390aa4f0c28ee04ca94b1dce62da178 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/Command.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/Command.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +public enum Command{ + APPEND_CHILD, + DELETE_CHILD, + PUT_ATTRIBUTE, + DELETE_ATTRIBUTE, + REPLACE_ROOT, + DEFAULT +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/Command.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/Command.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d687beee49742204fa26af185fa65c6c +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/NodeEditorError.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/NodeEditorError.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +public class NodeEditorError{ + + public static Error INDEX_OUT_OF_BOUNDS = new DefaultError(); + public static Error DELETE_KEY_NOT_FOUND = new DefaultError(); + public static Error NULL_VALUE_NOT_ALLOWED = new DefaultError(); + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/NodeEditorError.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/NodeEditorError.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4a937c83b8e69d346b0fab0de72b3999 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/NodePath.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/NodePath.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +using System.Collections.Generic; +public interface NodePath : IEnumerable { + NodePath add (int pos); + Pair pop(); + NodePath tail(); + int size(); + Pair last(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/NodePath.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/NodePath.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 49ab66a1eb535894fbc39ce3994b7cc8 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/TreeContext.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/TreeContext.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,22 @@ + +namespace JungleDB { + public interface TreeContext { + TreeNode getRoot(); + + TreeContext prev(); + + string getUuid(); + + string getTreeName(); + + long getRevision(); + + TreeMap>> getIndex(); + + // Iterable getOperations(); + + // ParentIndex getParentIndex(); do not use, in the game. + + InterfaceTraverser getTraverser(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/TreeContext.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/TreeContext.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 26a87e25475baf54bb68c07fa9e7e116 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/TreeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/TreeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ +namespace JungleDB { + public interface TreeEditor { + Either edit (TreeNode root, NodePath path, NodeEditor transformer); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/TreeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/TreeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9fe0b17a014bedb4ca7e138184d19bbe +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3a816248957d6bd4ab00fcc4949a72e3 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/DefaultNodePath.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/DefaultNodePath.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,88 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Collections; + +public class DefaultNodePath : NodePath { + private List path = new List(); + + IEnumerator IEnumerable.GetEnumerator() + { + // call the generic version of the method + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return path.iterator (); + } + + public DefaultNodePath() { + path = new List ().addLast (-1); + } + + private DefaultNodePath(List path) { + this.path = path; + } + + /// + /// Listに追加します。 + /// path = path.add(0)を2回する + /// path = path.add(0).add(0)する + /// これは同じ + /// + /// Position. + + public NodePath add(int pos) { + List newPath = path.addLast(pos); + return new DefaultNodePath(newPath); + } + + public Pair pop() { + int head = path.headList(); + List tail = path.deleteHead(); + return new Pair(head, new DefaultNodePath(tail)); + } + + public Pair last() { + int last = path.headList(); + List list = path.deleteHead(); + return new Pair(last, new DefaultNodePath(list)); + } + + public override string ToString() { + string s = "List <"; + int list_count = this.path.length(); + int count = 0; + foreach(var i in this.path) { + if (count != list_count -1){ + s += i.ToString() + ","; + } else { + s += i.ToString(); + } + count++; + } + return s + ">"; + } + + public int size() { + return path.length(); + } + + public NodePath tail() { + List tail = path.deleteLast (); + return new DefaultNodePath (tail); + } + + public List inits() { + List paths = new List (); + List coursePath = new List (); + foreach (int tmpPath in path) { + List tmp = coursePath.addLast (tmpPath); + paths = paths.addLast (new DefaultNodePath (tmp)); + coursePath = tmp; + } + return paths; + } + + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/DefaultNodePath.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/DefaultNodePath.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cd3f46a0bb5789343a715f897d28b075 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/DefaultTreeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/DefaultTreeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,60 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace JungleDB { + public class DefaultTreeEditor : TreeEditor { + private Traverser traverser; + public DefaultTreeEditor(Traverser traverser){ + this.traverser = traverser; + } + + public Either edit(TreeNode root,NodePath path, NodeEditor editor){ + DefaultEvaluator e = new DefaultEvaluator (path); + Either either = traverser.traverse (root, e); + + if (either.isA ()) { + return DefaultEither.newA (either.a ()); + } + Traversal t = either.b (); + return clone (t, editor); + } + + private Either clone(Traversal t, NodeEditor editor){ + List> path = new List> (); + + foreach (Direction direction in t) { + path = path.addLast (direction); + } + + Direction targetDirection = path.headList (); + TreeNode target = targetDirection.getTarget (); + Either either = editor.edit (target); + if (either.isA ()) { + return DefaultEither.newA (either.a ()); + } + + LoggingNode newWrap = either.b (); + + int pos = targetDirection.getPosition (); + TreeNode child = newWrap.getWrap (); + + foreach (Direction parentDirection in path.deleteHead()) { + TreeNodeChildren chs = parentDirection.getTarget ().getChildren (); + + Either ret = chs.replaceNode (pos, child); + if (ret.isA ()) { + return DefaultEither.newA (ret.a ()); + } + + child = ret.b (); + pos = parentDirection.getPosition (); + } + + TreeNode newRoot = child; + LoggingNode logNode = editor.wrap (newRoot, newWrap.getOperationLog ()); + return DefaultEither.newB (logNode); + + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/DefaultTreeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/DefaultTreeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b3c37ab69942144ca3a29cfde899bf6 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace JungleDB { + public interface TreeNode { + TreeNodeChildren getChildren(); + + TreeNodeAttributes getAttributes(); + + TreeNode createNewNode(); + + Either appendRootNode(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f063e8875c109bd4b8824782f247c95d +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNodeAttributes.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNodeAttributes.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +using System.Collections.Generic; +namespace JungleDB { + public interface TreeNodeAttributes : Attributes { + Either delete(string key); + Either put(string key, byte[] value); + TreeMap getAttributesAsRawMap(); + IEnumerator getKeys(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNodeAttributes.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNodeAttributes.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 00585164e6a1d634e83e18e704bcef82 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNodeChildren.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNodeChildren.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +namespace JungleDB { + public interface TreeNodeChildren : Children { + Either addNewChildAt (int pos); + Either deleteChildAt(int pos); + Either addNewChildAt(int pos,TreeNode newChild); + Either replaceNode(int pos,TreeNode replacement); + List getChildrenAsRawList(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/TreeNodeChildren.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/TreeNodeChildren.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f1a64aa7c5481574187ec6a9775fa735 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e0bc457e92c3bc248838d3e81783f5db +folderAsset: yes +timeCreated: 1477164410 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/DefaultOperationLog.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/DefaultOperationLog.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Collections; +using System; + +namespace JungleDB { + public class DefaultOperationLog : OperationLog { + private List log; + + + IEnumerator IEnumerable.GetEnumerator() + { + // call the generic version of the method + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + private static List EMPTY = new List(); + + public DefaultOperationLog() + : this(EMPTY) + { + } + + private DefaultOperationLog(List _log) + { + log = _log; + } + + public IEnumerator iterator() + { + return log.iterator(); + } + + + public OperationLog add(NodeOperation _op) + { + return new DefaultOperationLog(log.addLast(_op)); + } + + public int length() + { + return log.length(); + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/DefaultOperationLog.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/DefaultOperationLog.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5511b639ac999c944adacff6fc137111 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/DefaultTreeOperationLog.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/DefaultTreeOperationLog.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,67 @@ +using UnityEngine; +using System.Collections.Generic; +using System; +using System.Collections; +using System.Linq; + +namespace JungleDB { + public class DefaultTreeOperationLog : TreeOperationLog { + private IEnumerable list; + private int size; + + IEnumerator IEnumerable.GetEnumerator() + { + // call the generic version of the method + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + foreach (var i in list) { + yield return i; + } + } + + + public DefaultTreeOperationLog() + { + list = new List(); + size = 0; + } + + public DefaultTreeOperationLog(IEnumerable _list,int _size) + { + list = _list; + size = _size; + } + + // public IEnumerator iterator() + // { + // return list.itetator(); + // } + + public TreeOperationLog add(NodePath _p, NodeOperation _op) + { + TreeOperation op = new DefaultTreeOperation(_p,_op); + List newList = new List(op); + // java write Iterables.concat ここは間違い + IEnumerable concat = list.Union(newList); + + return new DefaultTreeOperationLog(concat,size + 1); + } + + public TreeOperationLog append(TreeOperationLog _log) + { + int argumentLogSize = _log.length(); + // java write Iterables.concat + IEnumerable concat = list.Union(_log); + + return new DefaultTreeOperationLog(concat,argumentLogSize + size); + } + + + public int length(){ + return size; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/DefaultTreeOperationLog.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/DefaultTreeOperationLog.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 45f4cfd975cd7a744ae07afc2cf5a75c +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingAttributes.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingAttributes.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,47 @@ + +namespace JungleDB { + public class LoggingAttributes { + + private TreeNode wrap; + private OperationLog log; + + public LoggingAttributes(TreeNode _wrap,OperationLog _log) + { + wrap = _wrap; + log = _log; + } + + public byte[] get(string _key) + { + TreeNodeAttributes attributes = wrap.getAttributes(); + return attributes.get(_key); + } + + private Either edit(NodeOperation _op) + { + Either either = _op.invoke(wrap); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TreeNode newNode = either.b(); + OperationLog newLog = log.add(_op); + LoggingNode newLogNode = new LoggingNode(newNode,newLog); + + return DefaultEither.newB(newLogNode); + } + + public Either delete(string _key) + { + + DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(_key); + return edit(deleteAttribute); + } + + public Either put(string _key, byte[] _value) + { + PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value); + return edit(putAttribute); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingAttributes.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingAttributes.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ffdd92c38e6228540835ba42bf3f22f5 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingChildren.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingChildren.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,61 @@ +using System.Collections; +using UnityEngine; + +namespace JungleDB { + public class LoggingChildren { + private TreeNode wrap; + private OperationLog log; + + public LoggingChildren(TreeNode _wrap,OperationLog _log) + { + wrap = _wrap; + log = _log; + } + + public int size() + { + Children children = wrap.getChildren(); + return children.size(); + } + + public Either edit(NodeOperation _op) + { + Either either = _op.invoke(wrap); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TreeNode newWrap = either.b(); + OperationLog newLog = log.add(_op); + LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog); + return DefaultEither.newB(newLoggingNode); + } + + public Either addNewChildAt(int _pos) + { + Debug.Log ("in addNewChild"); + NodeOperation addNewChildAt = new AppendChildAtOperation(_pos); + return edit(addNewChildAt); + } + + public Either deleteChildAt(int _pos) + { + NodeOperation deleteChildAt = new DeleteChildAtOperation(_pos); + return edit(deleteChildAt); + } + + public Either at(int _pos) + { + Children children = wrap.getChildren(); + Either either = children.at(_pos); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TreeNode node = either.b(); + LoggingNode logNode = new LoggingNode(node); + return DefaultEither.newB(logNode); + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingChildren.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingChildren.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 60da4a01e3c63e245b73bb61b20f301b +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,59 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class LoggingNode { + private TreeNode wrap; + private OperationLog log; + + public LoggingNode(TreeNode _wrap) + : this(_wrap,new DefaultOperationLog()) + { + } + + public LoggingNode(TreeNode _wrap,OperationLog _log) + { + wrap = _wrap; + log = _log; + } + + public LoggingAttributes getAttributes() + { + return new LoggingAttributes(wrap,log); + } + + public LoggingChildren getChildren() + { + Debug.Log ("in gtChildren"); + return new LoggingChildren(wrap,log); + } + + + public OperationLog getOperationLog() + { + return log; + } + + public Either replaceNewRootNode() { + NodeOperation replaceRootNode = new ReplaceRootNodeOperation(); + return edit(replaceRootNode); + } + + public Either edit(NodeOperation op){ + Either either = op.invoke(wrap); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TreeNode newWrap = either.b(); + OperationLog newLog = log.add(op); + LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog); + return DefaultEither.newB(newLoggingNode); + } + + public TreeNode getWrap() + { + return wrap; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/LoggingNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/LoggingNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 67f57fc27eee02346ba82e87a2793d8f +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/OperationLog.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/OperationLog.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ +using System.Collections.Generic; +namespace JungleDB { + public interface OperationLog : IEnumerable { + OperationLog add (NodeOperation _op); + int length(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/OperationLog.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/OperationLog.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 78c980ae4a9174e49896c7ac6218f3a7 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/TreeOperationLog.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/TreeOperationLog.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,8 @@ +using System.Collections.Generic; +namespace JungleDB { + public interface TreeOperationLog : IEnumerable { + TreeOperationLog add (NodePath _p, NodeOperation _op); + TreeOperationLog append (TreeOperationLog _log); + int length(); + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/impl/logger/TreeOperationLog.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/impl/logger/TreeOperationLog.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b77e6a85d05d98747a89edfd44a89f9c +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/index.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/index.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b79bdad8650648a4abdee3375bd82910 +folderAsset: yes +timeCreated: 1477164410 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/index/ParentIndex.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/index/ParentIndex.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,50 @@ +namespace JungleDB { + public class ParentIndex { + + private TreeMap parentIndex; + + public ParentIndex() { + parentIndex = new TreeMap(); + } + + public bool isEmpty(){ + return parentIndex.isEmpty(); + } + + public TreeNode get(TreeNode child) { + // return parentIndex.get(child).get(); + return null; + } + + public ParentIndex set(TreeNode parent ,TreeNode child) { + parentIndex = parentIndex.put(child, parent); + return this; + } + + public ParentIndex delete(TreeNode child) { + parentIndex = parentIndex.delete(child); + return this; + } + + public ParentIndex deleteAllChildren(TreeNode parentNode) { + //TreeNodeChildren children = parentNode.getChildren(); + // Iterator childrenIterator = children.iterator(); + // for (; childrenIterator.hasNext();) { + // TreeNode child = childrenIterator.next(); + // parentIndex = parentIndex.delete(child); + // } + return this; + } + + public ParentIndex addAllChildren(TreeNode parentNode) { + //TreeNodeChildren children = parentNode.getChildren(); + // Iterator childrenIterator = children.iterator(); + // for (; childrenIterator.hasNext();) { + // TreeNode child = childrenIterator.next(); + // parentIndex = parentIndex.put(child, parentNode); + // } + return this; + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/index/ParentIndex.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/index/ParentIndex.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9a0333deccae8e488b4cc01e589c635 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cd5e1d78ef7593142b937d9816134569 +folderAsset: yes +timeCreated: 1477164410 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/AppendChildAtOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/AppendChildAtOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace JungleDB { + public class AppendChildAtOperation : NodeOperation { + private int pos; + + public AppendChildAtOperation(int _pos) + { + pos = _pos; + } + + public Command getCommand() + { + return Command.APPEND_CHILD; + } + + public Either invoke(TreeNode _target) + { + return _target.getChildren().addNewChildAt(pos); + } + + public int getPosition() + { + return pos; + } + + public string getKey() + { + return null; + } + + public byte[] getValue() + { + return new byte[1]{0}; + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/AppendChildAtOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/AppendChildAtOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0523879de223e9947a2346bf76fce774 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DefaultTreeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DefaultTreeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,22 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DefaultTreeOperation : TreeOperation { + private NodePath path; + private NodeOperation operation; + + public DefaultTreeOperation(NodePath _path, NodeOperation _operation){ + path = _path; + operation = _operation; + } + + public NodePath getNodePath() { + return path; + } + + public NodeOperation getNodeOperation() { + return operation; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DefaultTreeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DefaultTreeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e348937a30bf29b4b94be8cfa58ad19a +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DeleteAttributeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DeleteAttributeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,33 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace JungleDB { + public class DeleteAttributeOperation : NodeOperation { + private string key; + + public DeleteAttributeOperation(string _key) { + key = _key; + } + + public Command getCommand() { + return Command.DELETE_ATTRIBUTE; + } + + public Either invoke(TreeNode _target) { + return _target.getAttributes ().delete (key); + } + + public int getPosition() { + return -1; + } + + public string getKey() { + return key; + } + + public byte[] getValue() { + return new byte[1]{0}; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DeleteAttributeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DeleteAttributeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c23e7109cff63f8498d5b86898300a5d +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DeleteChildAtOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DeleteChildAtOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,41 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace JungleDB { + public class DeleteChildAtOperation : NodeOperation { + private int pos; + + public DeleteChildAtOperation(int _pos) + { + pos = _pos; + } + + + public Command getCommand() + { + return Command.DELETE_CHILD; + } + + public Either invoke(TreeNode _target) + { + return _target.getChildren().deleteChildAt(pos); + } + + public int getPosition() + { + return pos; + } + + public string getKey() + { + return null; + } + + public byte[] getValue() + { + return new byte[1]{0}; + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/DeleteChildAtOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/DeleteChildAtOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9897047d8fc06404eaae6303b85521d5 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/NodeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/NodeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +namespace JungleDB { + public interface NodeOperation { + Command getCommand(); + Either invoke (TreeNode _target); + int getPosition(); + string getKey(); + byte[] getValue(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/NodeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/NodeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c80263c3ebe94c44fa912b70158d9519 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/PutAttributeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/PutAttributeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,37 @@ +namespace JungleDB { + public class PutAttributeOperation : NodeOperation { + private string key; + private byte[] value; + + public PutAttributeOperation(string _key, byte[] _value) + { + key = _key; + value = _value; + } + + + public Command getCommand() + { + return Command.PUT_ATTRIBUTE; + } + + public Either invoke(TreeNode _target) + { + return _target.getAttributes().put(key,value); + } + public int getPosition() + { + return -1; + } + + public string getKey() + { + return key; + } + + public byte[] getValue() + { + return value; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/PutAttributeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/PutAttributeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0ddc863fe2cdfdf4080dae936bab596a +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/ReplaceRootNodeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/ReplaceRootNodeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,28 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace JungleDB { + public class ReplaceRootNodeOperation : NodeOperation { + + public Command getCommand() { + return Command.REPLACE_ROOT; + } + + public Either invoke(TreeNode target) { + return target.appendRootNode(); + } + + public int getPosition() { + return -1; + } + + public string getKey() { + return null; + } + + public byte[] getValue() { + return new byte[1]{0}; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/ReplaceRootNodeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/ReplaceRootNodeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 28da3db3d84207440a39dd7e795fd0a1 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/TreeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/TreeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface TreeOperation { + NodePath getNodePath(); + NodeOperation getNodeOperation(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/operations/TreeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/operations/TreeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6779d11d1748e5f4faeaebe690a04e08 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 78319f8f0586b594a84e21fbf350a2d7 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/AppendChildAt.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/AppendChildAt.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,35 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class AppendChildAt : NodeEditor { + private int pos; + + public AppendChildAt(int _pos){ + pos = _pos; + } + + public Either _edit(LoggingNode _e) + { + Either either = _e.getChildren().addNewChildAt(pos); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/AppendChildAt.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/AppendChildAt.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 02b3a361912c098468382182e68ef609 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/DeleteAttribute.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/DeleteAttribute.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DeleteAttribute : NodeEditor { + private string key; + + public DeleteAttribute(string _key) + { + key = _key; + } + + public Either _edit(LoggingNode logNode) + { + Either either = logNode.getAttributes().delete(key); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/DeleteAttribute.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/DeleteAttribute.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c522a53c524cbb746bdf4524bc42fbe4 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/DeleteChildAt.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/DeleteChildAt.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DeleteChildAt : NodeEditor { + private int pos; + + public DeleteChildAt(int _pos) + { + pos = _pos; + } + + public Either _edit(LoggingNode logNode) + { + Either either = logNode.getChildren().deleteChildAt(pos); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/DeleteChildAt.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/DeleteChildAt.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bea835f0c1013dd41bf6f47616d2e2de +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/NodeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/NodeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,6 @@ +namespace JungleDB { + public interface NodeEditor { + Either edit (TreeNode _e); + LoggingNode wrap (TreeNode node, OperationLog op); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/NodeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/NodeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7764d56dc1c5cfb449bd81e66b823fb3 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/PutAttribute.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/PutAttribute.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,38 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class PutAttribute : NodeEditor { + private string key; + private byte[] value; + + public PutAttribute(string _key, byte[] _value) + { + key = _key; + value = _value; + } + + public Either _edit(LoggingNode _e) + { + Either either = _e.getAttributes().put(key,value); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/PutAttribute.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/PutAttribute.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e2055099f7d5d364a9e4bbb5d132916b +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/replaceRootNodeAt.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/replaceRootNodeAt.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,29 @@ +using System.Collections; + +namespace JungleDB { + public class replaceRootNodeAt : NodeEditor { + public Either _edit(LoggingNode _e) + { + Either either = _e.replaceNewRootNode(); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/store/transformer/replaceRootNodeAt.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/store/transformer/replaceRootNodeAt.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 08f7c41f52283b94ea00666ecb27b6f5 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 894271a640f4ac449a95276b05cb6ad5 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/AtomicReference.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/AtomicReference.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,24 @@ +using System.Threading; + +public class AtomicReference where T : class { + private T value; + + public AtomicReference(T value) { + this.value = value; + } + + public bool CompareAndSet(T newValue, T prevValue) { + T oldValue = value; + if (oldValue == prevValue) { + Interlocked.CompareExchange (ref value, newValue, prevValue); + return true; + } else { + return false; + } + } + + + public T Get() { + return value; + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/AtomicReference.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/AtomicReference.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0da9607890c31124faba9aa6297ab163 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultJungleTreeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultJungleTreeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,117 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace JungleDB { + public class DefaultJungleTreeEditor : JungleTreeEditor { + + private TransactionManager txManager; + private TreeNode root; + private TreeEditor editor; + private TreeOperationLog log; + + public DefaultJungleTreeEditor(TreeNode _root,TransactionManager _txManager,TreeEditor _editor) + : this(_root, _txManager, _editor, new DefaultTreeOperationLog()) + { + } + + + + public DefaultJungleTreeEditor(TreeNode newNode,TransactionManager txManager,TreeEditor editor,TreeOperationLog log) + { + this.root = newNode; + this.txManager = txManager; + this.editor = editor; + this.log = log; + } + + + + private Either _edit(NodePath _path,NodeEditor _e) + { + Either either = editor.edit (root, _path, _e); + if (either.isA ()) { + return DefaultEither.newA (either.a ()); + } + + LoggingNode newLogging = either.b (); + OperationLog newLog = newLogging.getOperationLog (); + TreeNode newNode = newLogging.getWrap (); + + IterableConverter.Converter converter = new InnerConverter (_path); + + + IEnumerable iterable = new IterableConverter (newLog, converter); + DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog (iterable, newLog.length ()); + TreeOperationLog newTreeOpLog = log.append (treeOperationLog); + + JungleTreeEditor newEditor = new DefaultJungleTreeEditor (newNode, txManager, editor, newTreeOpLog); + return DefaultEither.newB (newEditor); + + } + + + public Either replaceNewRootNode() { + replaceRootNodeAt appendChildAt = new replaceRootNodeAt (); + return _edit (new DefaultNodePath(), appendChildAt); + } + + public Either addNewChildAt(NodePath _path, int _pos) { + AppendChildAt appendChildAt = new AppendChildAt (_pos); + return _edit (_path, appendChildAt); + } + + public Either deleteChildAt(NodePath _path, int _pos) { + DeleteChildAt deleteChildAt = new DeleteChildAt(_pos); + return _edit(_path,deleteChildAt); + } + + public Either putAttribute(NodePath _path, string _key, byte[] _value) { + PutAttribute putAttribute = new PutAttribute (_key, _value); + return _edit (_path, putAttribute); + } + + public Either deleteAttribute(NodePath _path, string _key) { + DeleteAttribute deleteAttribute = new DeleteAttribute (_key); + return _edit (_path, deleteAttribute); + } + + public Either edit(NodePath _path,NodeEditor _editor) { + return _edit(_path,_editor); + } + + /// + /// Treeを変更したあとSuccess(push)を行う + /// + + public Either commit() { + Either either = this.txManager.commit(this.root, this.log); + // このlogをサーバにpushする? + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TransactionManager newTxManager = either.b(); + JungleTreeEditor newTreeEditor = new DefaultJungleTreeEditor(this.root, newTxManager, this.editor); + + return DefaultEither.newB(newTreeEditor); + } + + public Either flushSuccess() { + return commit(); + } + + public class InnerConverter : IterableConverter.Converter{ + + NodePath path; + + public InnerConverter(NodePath _path) { + path = _path; + } + + + public TreeOperation conv(NodeOperation _b){ + return new DefaultTreeOperation(path,_b); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultJungleTreeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultJungleTreeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 95c5bce8d2a69ec4eac64938743916e3 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTransactionManager.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTransactionManager.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,94 @@ +using System.Collections.Generic; +using System.Collections; +using System; + +namespace JungleDB { + public class DefaultTransactionManager : TransactionManager { + private AtomicReference repository; + private TreeContext tip; + private ChangeListWriter writer; + private string uuid; + + + public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, AtomicReference _repository, string _uuid) { + repository = _repository; + tip = _tip; + writer = _writer; + uuid = _uuid; + } + + public Either commit(TreeNode newRoot, TreeOperationLog _log) { + long currentRevision = tip.getRevision(); + long nextRevision = currentRevision + 1; + + string _treeName = tip.getTreeName(); + // 通信時に必要? + ChangeList list = new InnerChangeList(_log, _treeName, uuid); + + InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); + // traverser.createIndex(); + TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,traverser); + // compare and setがどういう役割か?Javaで + if (repository.CompareAndSet(newTreeContext, newTreeContext.prev())) { // CompareAndSetが成功した場合に処理を実行 + TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid); + return DefaultEither.newB(txManager); + } + + return DefaultEither.newA((Error) new DefaultError()); + } + + public Either firstcommit(TreeNode _newRoot, TreeOperationLog _log) { + return commit(_newRoot,_log); + } + + public string getUUID() { + return uuid; + } + + public long getRevision() { + return tip.getRevision(); + } + + public class InnerChangeList : ChangeList{ + + TreeOperationLog log; + string treeName; + string uuid; + + + IEnumerator IEnumerable.GetEnumerator() + { + // call the generic version of the method + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + + public InnerChangeList(TreeOperationLog _log, string _treeName, string _uuid){ + this.log = _log; + this.treeName = _treeName; + this.uuid = _uuid; + } + + public IEnumerator iterator() { + return log.GetEnumerator(); + } + + public string getTreeName() { + return treeName; + } + + public TreeOperationLog getLog() { + return log; + } + + public string uuids() { + return uuid; + } + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTransactionManager.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTransactionManager.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 999df8a86f830e5469eb26a1e22a5996 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeContext.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeContext.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,65 @@ +using UnityEngine; +using System.Collections.Generic; + +// override need? + +namespace JungleDB { + public class DefaultTreeContext : TreeContext { + private TreeNode root; + private TreeContext previous; + private ChangeList changeList; + private string uuid; + private string treeName; + private long revision; + private InterfaceTraverser traverser; + + public DefaultTreeContext(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.treeName = _treeName; + this.revision = _revision; + this.traverser = traverser; + } + + public TreeNode getRoot() { + return root; + } + + public TreeContext prev() { + return previous; + } + + public ChangeList getChangeList() { + return changeList; + } + + public string getUuid() { + return uuid; + } + + public string getTreeName() { + return treeName; + } + + public long getRevision() { + return revision; + } + + public IEnumerable getOperations() { + return changeList; + } + + public TreeMap>> getIndex() { + return traverser.getIndex (); + } + + // don't write parent Index. + + public InterfaceTraverser getTraverser() { + return traverser; + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeContext.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeContext.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe30eb50b720a7047b42a6924057a07b +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNode.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNode.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,46 @@ +using UnityEngine; + +namespace JungleDB { + public class DefaultTreeNode : TreeNode { + + private List children; + private TreeMap attrs; + private static readonly List NIL_LIST = new List(); + + public DefaultTreeNode() + : this (NIL_LIST, new TreeMap ()) + { + } + + public DefaultTreeNode(List _children, TreeMap _attrs) { + attrs = _attrs; + children = _children; + } + + public TreeNodeChildren getChildren() { + return new DefaultTreeNodeChildren(children, attrs); + } + + public TreeNodeAttributes getAttributes() { + return new DefaultTreeNodeAttribute(children, attrs); // count = null. + } + + public TreeNode createNewNode() { + return new DefaultTreeNode(); + } + + public DefaultTreeNode clone() { + return new DefaultTreeNode(children, attrs); + } + + public Either appendRootNode() { + TreeNodeChildren newRootChildren = new DefaultTreeNodeChildren(NIL_LIST, new TreeMap()); + Either either = newRootChildren.addNewChildAt(0,this); + return either; + } + + public int compareTo(TreeNode o) { + return this.GetHashCode() - o.GetHashCode(); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNode.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNode.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0632916a950ff214a8ca5bc2a043a05f +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNodeAttribute.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNodeAttribute.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; +using System.Text; + +namespace JungleDB { + public class DefaultTreeNodeAttribute : TreeNodeAttributes { + public List children; + public TreeMap attrs; + + public DefaultTreeNodeAttribute(List _children, TreeMap _attrs){ + children = _children; // null? + attrs = _attrs; + } + + public TreeMap getAttributesAsRawMap(){ + return attrs; + } + + public Either delete(string _key) { + if (_key == null) { + return DefaultEither.newA (NodeEditorError.NULL_VALUE_NOT_ALLOWED); + } + + if (null == attrs.getRoot()) { + return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND); + } + + TreeMap newMap = attrs.delete(_key); + TreeNode newNode = new DefaultTreeNode(children, newMap); + return DefaultEither.newB(newNode); + } + + public Either put(string _key, byte[] _value){ + if (_key == null || _value == null) { + return DefaultEither.newA (NodeEditorError.NULL_VALUE_NOT_ALLOWED); + } + + TreeMap newMap = attrs.put (_key, _value); + + TreeNode newNode = new DefaultTreeNode (children, newMap); + + return DefaultEither.newB (newNode); + } + + public byte[] get(string _key) { + if (_key == null) { + return new byte[1]{0}; + } + byte[] op = attrs.get(_key); //null + if (op != null) { + return op; + } + return new byte[1]{0}; + } + + public string getString(string key, Encoding enc) { + char[] attribute = key.ToCharArray(); + if (attribute != null){ + return new string(attribute); + } + return null; + } + + public string getString(string key) { + return null; + } + public IEnumerator getKeys(){ + return attrs.keys (); + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNodeAttribute.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNodeAttribute.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f51ab094cfe23e64283b86da2d6614d1 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNodeChildren.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNodeChildren.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,95 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DefaultTreeNodeChildren : TreeNodeChildren { + + public List children; + public TreeMap attrs; + + public DefaultTreeNodeChildren(List _children, TreeMap _attrs){ + children = _children; + attrs = _attrs; + } + + private bool boundaryCheck(int _pos) { + int size = children.length (); + if (size < _pos) { + return false; + } + return true; + } + + public List getChildrenAsRawList() { + return children; + } + + public Either addNewChildAt(int _pos) { + if (!boundaryCheck(_pos) || _pos < 0) { + return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + + List newChildren = children.add(_pos, new DefaultTreeNode()); + TreeNode newNode = new DefaultTreeNode(newChildren, attrs); + return DefaultEither.newB(newNode); + } + + + public Either deleteChildAt(int _pos) { + if (!boundaryCheck(_pos) || _pos < 0 || size() == 0) { + return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + + List newChildren = children.delete(_pos); + TreeNode newNode = new DefaultTreeNode(newChildren, attrs); + + return DefaultEither.newB(newNode); + } + + + public int size() { + return children.length(); + } + + + // public Iterator iterator() { + // return children.iterator(); + // } + + + public Either replaceNode(int _pos, TreeNode _replacement) { + int size = children.length(); + if (!(0 <= _pos && _pos < size)) { + return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + TreeNode replacement = _replacement; + + List newChildren = children.replace(_pos, replacement); + TreeNode node = new DefaultTreeNode(newChildren, attrs); + return DefaultEither.newB(node); + } + + + public Either at(int _pos) { + if (children.length() < _pos + 1) { + return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + + TreeNode Node = children.index(_pos); + + return DefaultEither.newB(Node); + } + + + public Either addNewChildAt(int _pos, TreeNode _newChild) { + if (!boundaryCheck(_pos) || _pos < 0) { + return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + List newChildren = children.add(_pos, _newChild); + TreeNode newNode = new DefaultTreeNode(newChildren, attrs); + + return DefaultEither.newB(newNode); + } + + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/DefaultTreeNodeChildren.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/DefaultTreeNodeChildren.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aad4e17a0c06655489435de5d1940e61 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/TransactionManager.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/TransactionManager.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ + +namespace JungleDB { + public interface TransactionManager { + Either commit(TreeNode _newRoot, TreeOperationLog _log); + Either firstcommit(TreeNode _newRoot, TreeOperationLog _log); + string getUUID(); + long getRevision(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/transaction/TransactionManager.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/transaction/TransactionManager.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 01691d4133a56a041800362ff28da91f +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62dd18e62fb9bc841af0de74ff5f42de +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultEvaluation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultEvaluation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,22 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DefaultEvaluation : Evaluation { + private Result result; + private Evaluator evaluator; + + public DefaultEvaluation(Result _result, Evaluator _evaluator) { + result = _result; + evaluator = _evaluator; + } + + public Result results() { + return result; + } + + public Evaluator evaluators() { + return evaluator; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultEvaluation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultEvaluation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ceea8d81befe44847b389f3eca9c684a +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultEvaluator.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultEvaluator.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,35 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class DefaultEvaluator : Evaluator { + private NodePath path; + + public DefaultEvaluator(NodePath _path) { + path = _path; + } + + public Evaluation evaluate(TreeNode _current, int _pos){ + Pair pop = path.pop (); + int head = pop.lefts (); + + if (path.size () == 1) { + if (head == _pos) { + return new DefaultEvaluation (Result.GOAL, null); + } + } + + DefaultEvaluator nextEvaluator; + Result result; + if (head == _pos) { + result = Result.ACCEPT; + nextEvaluator = new DefaultEvaluator (pop.rights ()); + } else { + result = Result.CONTINUE; + nextEvaluator = null; + } + + return new DefaultEvaluation (result, nextEvaluator); + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultEvaluator.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultEvaluator.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 91fa3b1eea78ce34ea11e08cb46a6ff4 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultTraverser.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultTraverser.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,162 @@ +using System.Collections.Generic; +using System.Collections; +using UnityEngine; +using System; + +namespace JungleDB { + public class DefaultTraverser : Traverser { + + + public Either traverse(TreeNode _root, Evaluator _evaluator) { + Children warper = new InnerChildren(_root, _evaluator); + + Children chs = warper; + Either>> ret = _traverse(chs, _evaluator, -1); + + if (ret.isA ()) { + return DefaultEither.newA (ret.a ()); + } + + List> list = ret.b (); + IEnumerator> iterable = list.iterator (); + TreeNode destination = ret.b ().headList ().getTarget (); + + Traversal traversal = new InnerTraversal (iterable, destination); + + return DefaultEither.newB (traversal); + + } + + + private Either>> _traverse(Children _chs, Evaluator _evaluator, int _pos) { + int pos = _pos; + TreeNode ch; + for (int i = 0; i < _chs.size(); i++) { + Either either = _chs.at(i); + if (either.isA ()) { + break; + } + + ch = either.b(); + Evaluation e = _evaluator.evaluate (ch, pos); + Result r = e.results(); + + if (r == Result.ACCEPT) { + return _accept (ch, pos, e.evaluators ()); + } + + if (r == Result.GOAL) { + return DefaultEither>>.newB(_goal(ch, pos)); + } + + if (r == Result.BREAK) { + break; + } + + if (r == Result.CONTINUE) { + pos++; + continue; + } + + return DefaultEither>>.newA (TraverserError.UNDEFINED_OPERATOR); + } + return DefaultEither>>.newA (TraverserError.PATH_NOT_FOUND); + } + + + private List> _goal( TreeNode _current, int _pos) { + Direction d = new InnerDirection (_pos, _current); + + List> list = new List> (); + List> newList = list.addLast (d); + + return newList; + } + + + private Either>> _accept(TreeNode _current, int _pos,Evaluator _evaluator) + { + Children chs = _current.getChildren (); + Either>> either = _traverse (chs, _evaluator, 0); + if (either.isA ()) { + return either; + } + List> list = either.b (); + Direction d = new InnerDirection (_pos, _current); + + List> newList = list.addLast (d); + return DefaultEither>>.newB (newList); + } + + public class InnerTraversal : Traversal{ + IEnumerator> iterable; + TreeNode destination; + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator> GetEnumerator() + { + return iterable; + } + + + public InnerTraversal(IEnumerator> _iterable, TreeNode _distination){ + this.iterable = _iterable; + this.destination = _distination; + } + + + public TreeNode destinations() { + return destination; + } + + } + + public class InnerChildren : Children{ + TreeNode root; + Evaluator evaluator; + + public InnerChildren(TreeNode _root, Evaluator _evaluator){ + this.root = _root; + this.evaluator = _evaluator; + } + + public IEnumerator iterator() { + List list = new List (); + return list.addLast (root).iterator (); + } + + public int size() { + return 1; + } + + public Either at(int _pos) { + if (_pos != 0) { + return DefaultEither.newA (NodeEditorError.INDEX_OUT_OF_BOUNDS); + } + return DefaultEither.newB (root); + } + } + + public class InnerDirection : Direction{ + int pos; + TreeNode current; + + public InnerDirection(int _pos, TreeNode _current) { + this.pos = _pos; + this.current = _current; + } + + public int getPosition() { + return pos; + } + + public TreeNode getTarget(){ + return current; + } + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/DefaultTraverser.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/DefaultTraverser.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 980408d2be7e4244883b420492279cbe +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Direction.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Direction.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,6 @@ + + +public interface Direction { + int getPosition(); + T getTarget(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Direction.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Direction.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 248dd0b79d0102b4d8167c0ccb05a947 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Evaluation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Evaluation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface Evaluation { + Result results(); + Evaluator evaluators(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Evaluation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Evaluation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: baee26f02b32b294aba70808d6faf7db +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Evaluator.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Evaluator.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ +namespace JungleDB { + public interface Evaluator { + Evaluation evaluate (TreeNode _current, int _pos); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Evaluator.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Evaluator.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 29e3b76d4424592448f6f4a037863244 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/InterfaceTraverser.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/InterfaceTraverser.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,39 @@ + +namespace JungleDB { + public class InterfaceTraverser { + TreeNode root; + TreeMap>> indexList; + ParentIndex parentIndex; + bool parentUpdateFlag; + bool useIndex; + + public InterfaceTraverser(TreeNode root, bool indexFlag) + : this (root, new TreeMap>> (), new ParentIndex (), indexFlag) + { + } + + public InterfaceTraverser(TreeNode root, TreeMap>> index, + ParentIndex parentIndex, bool useIndex) { + this.root = root; + this.indexList = index; + this.parentIndex = parentIndex; + if (parentIndex.isEmpty()) + parentUpdateFlag = true; + else + parentUpdateFlag = false; + this.useIndex = useIndex; + } + + public TreeMap>> getIndex() { + return indexList; + } + + public void commit() { + parentUpdateFlag = false; + } + + public ParentIndex getParentIndex() { + return parentIndex; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/InterfaceTraverser.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/InterfaceTraverser.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6594043bbdc687a458a165dcf329f8cd +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Traversal.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Traversal.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ +using System.Collections.Generic; + +namespace JungleDB { + public interface Traversal : IEnumerable> { + TreeNode destinations(); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Traversal.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Traversal.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d031dbf23e4fa84cadaa70fe677af4c +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Traverser.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Traverser.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +namespace JungleDB { + public interface Traverser { + + Either traverse ( TreeNode _root, Evaluator _evaluator); + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/Traverser.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/Traverser.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f73d79a1b5f0f44f8725b3e539850ee +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/TraverserError.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/TraverserError.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ + +public class TraverserError { + public static Error UNDEFINED_OPERATOR = new DefaultError(); + public static Error PATH_NOT_FOUND = new DefaultError(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/traverser/TraverserError.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/traverser/TraverserError.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 255979b1cc0bc4742893459d13a0ff41 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a80eabd5eda649b4f8a46d88e4ba8aa6 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/DefaultEither.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/DefaultEither.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,44 @@ + +public class DefaultEither : Either { + private A theA; + private B theB; + + private DefaultEither(A _theA, B _theB){ + theA = _theA; + theB = _theB; + } + + public static DefaultEither newA(A _theA) + { + return new DefaultEither(_theA,default(B)); + } + + public static DefaultEither newB(B _theB) + { + return new DefaultEither(default(A),_theB); + } + + public A a() + { + return theA; + } + + + public bool isA() + { + return theA != null; + } + + + public B b() + { + return theB; + } + + + public bool isB() + { + return theB != null; + } + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/DefaultEither.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/DefaultEither.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 08c0247d5d3a4ae4a8512ec60da56d38 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/DefaultError.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/DefaultError.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,5 @@ + + +public class DefaultError : Error { + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/DefaultError.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/DefaultError.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 59855795de1cb2348a2ee6c8eabfbc79 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Either.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Either.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,7 @@ + +public interface Either { + A a(); + bool isA(); + B b(); + bool isB(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Either.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Either.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9ef9a184c843f6b46b792ba58213e0d6 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Error.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Error.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,4 @@ + +public interface Error { + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Error.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Error.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4549be06075cc24b80e1b9741aea977 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/GetOldTreeError.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/GetOldTreeError.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,4 @@ + +public class GetOldTreeError : Error { + public static Error OLD_TREE_NOT_FOUND = new DefaultError(); +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/GetOldTreeError.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/GetOldTreeError.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cb38025bf67dd914ebcb1f60b0cc46c8 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/IterableConverter.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/IterableConverter.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,79 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Collections; +using System; + +public class IterableConverter : IEnumerable { + private IEnumerable iterable; + private Converter converter; + + + IEnumerator IEnumerable.GetEnumerator() + { + // call the generic version of the method + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + public IterableConverter(IEnumerable _iterable,Converter _converter) + { + iterable = _iterable; + converter = _converter; + } + + public IEnumerator iterator() + { + return new IteratorConverter(iterable.GetEnumerator(),converter); + } + + private class IteratorConverter : IEnumerator + { + public List appLines { get; set; } + + private IEnumerator iterator; + private Converter converter; + + public IteratorConverter(IEnumerator _iterator,Converter _converter) + { + iterator = _iterator; + converter = _converter; + } + + public bool MoveNext() + { + return iterator.MoveNext(); + } + + public A Current + { + get{ + return converter.conv (iterator.Current); + } + } + + public void Reset() + { + // ホントはremove? + iterator.Reset(); + } + + object IEnumerator.Current + { + get { return appLines; } + } + + public void Dispose() { + ((IEnumerator)this.appLines).Dispose (); + } + } + + + public interface Converter{ + A conv (B _b); + } + +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/IterableConverter.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/IterableConverter.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 161d593d0659680458539ede6f5c5306 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Pair.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Pair.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,21 @@ +using UnityEngine; +using System.Collections; + +public class Pair { + private L left; + private R right; + + public Pair(L _left,R _right){ + left = _left; + right = _right; + } + // not same name , add s. + public L lefts(){ + return left; + } + + public R rights(){ + return right; + } + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-main/util/Pair.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-main/util/Pair.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bff6c747cbf39ba4f9b21adbe6d7f8b3 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 257471bdf6283da4f8601b67642836c1 +folderAsset: yes +timeCreated: 1477166756 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/core.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/core.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3dd684c0892edc5489f868ab6ce99761 +folderAsset: yes +timeCreated: 1477166842 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/core/NetworkDefaultJungle.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/core/NetworkDefaultJungle.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,76 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +namespace JungleDB { + public class NetworkDefaultJungle : Jungle { + + private Journal Journal; + private TreeMap Trees; + private string Uuid; + private TreeEditor Editor; + + public NetworkDefaultJungle(Journal jou, string uid, TreeEditor edit) { + this.Journal = jou; + this.Trees = new TreeMap(); + this.Uuid = uid; + this.Editor = edit; + } + + public JungleTree getTreeByName (string name) { + return Trees.get(name); + } + + public JungleTree createNewTree(string name) { + ChangeList list = new InnerChangeList(this.Uuid, name); + TreeNode root = new DefaultTreeNode(); + InterfaceTraverser traverser = new InterfaceTraverser(root, true); + TreeContext tc = new DefaultTreeContext(root, null, list, this.Uuid, name, 0, traverser); + JungleTree newTree = new NetworkDefaultJungleTree(name, tc, this.Uuid, Journal.getWriter(), this.Editor); + if (Trees.put(name, newTree) != null) { + return null; + } + return newTree; + } + + + public class InnerChangeList : ChangeList { + + string uuid; + string name; + + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + // construct + public InnerChangeList(string _uuid, string _name) { + this.uuid = _uuid; + this.name = _name; + } + + public IEnumerator iterator() { + List nil = new List(); + return nil.iterator(); + } + + public string uuids() { + return uuid; + } + + public string getTreeName() { + return name; + } + + public TreeOperationLog getLog() { + return new DefaultTreeOperationLog(); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/core/NetworkDefaultJungle.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/core/NetworkDefaultJungle.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6fbf0bfbabbed14394a802eed9536b0 +timeCreated: 1477166885 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f3af5df6fded0474cad06f101e72c8d9 +folderAsset: yes +timeCreated: 1477166767 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkAppendChildAtOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkAppendChildAtOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkAppendChildAtOperation : NodeOperation { + + private int Position; + + public NetworkAppendChildAtOperation() { + this.Position = -2; + } + + public NetworkAppendChildAtOperation(int pos){ + this.Position = pos; + } + + public Command getCommand() { + return Command.APPEND_CHILD; + } + + public Either invoke (TreeNode target) { + return target.getChildren().addNewChildAt(this.Position); + } + + public int getPosition () { + return this.Position; + } + + public string getKey() { + return null; + } + + public byte[] getValue() { + return null; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkAppendChildAtOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkAppendChildAtOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 05852e6f2f412224c891d37b9a7185bf +timeCreated: 1477182695 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkDeleteAttributeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkDeleteAttributeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkDeleteAttributeOperation : NodeOperation { + + private string Key; + + public NetworkDeleteAttributeOperation() { + this.Key = null; + } + + public NetworkDeleteAttributeOperation(string key){ + this.Key = key; + } + + public Command getCommand() { + return Command.DELETE_ATTRIBUTE; + } + + public Either invoke (TreeNode target) { + return target.getAttributes().delete(this.Key); + } + + public int getPosition () { + return -1; + } + + public string getKey() { + return this.Key; + } + + public byte[] getValue() { + return null; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkDeleteAttributeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkDeleteAttributeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c6b7b0ce1247c5d40ad6983fc512536b +timeCreated: 1477182724 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkDeleteChildAtOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkDeleteChildAtOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkDeleteChildAtOperation : NodeOperation { + + private int Position; + + public NetworkDeleteChildAtOperation () { + + } + + public NetworkDeleteChildAtOperation(int pos) { + this.Position = pos; + } + + public Command getCommand () { + return Command.DELETE_CHILD; + } + + public Either invoke (TreeNode target) { + return target.getChildren().deleteChildAt(this.Position); + } + + public int getPosition () { + return this.Position; + } + + public string getKey() { + return null; + } + + public byte[] getValue () { + return null; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkDeleteChildAtOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkDeleteChildAtOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b4f092420abfa1145a4690ba2d67bef4 +timeCreated: 1477182761 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkNodeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkNodeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,96 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkNodeOperation : NodeOperation { + + public int Position; + public string Key; + public byte[] Value; + public int commandType; + + // when switch use static readonly so, use const. + // when A code compalie, case const use is fast. + // case readonly use is bit slow. + public const int NUM_PUT_ATTRIBUTE = 1; + public const int NUM_APPEND_CHILD = 2; + public const int NUM_DELETE_CHILD = 3; + public const int NUM_DELETE_ATTRIBUTE = 4; + + public NetworkNodeOperation () { + this.Position = -2; + this.Key = null; + this.Value = null; + this.commandType = 0; + } + + public NetworkNodeOperation(NodeOperation op) { + this.Position = op.getPosition(); + this.Key = op.getKey(); + this.Value = op.getValue(); + this.commandType = getCommandType(op.getCommand()); + } + + public static int getCommandType (Command c) { + switch(c) { + case Command.PUT_ATTRIBUTE: + return NUM_PUT_ATTRIBUTE; + case Command.APPEND_CHILD: + return NUM_APPEND_CHILD; + case Command.DELETE_CHILD: + return NUM_DELETE_CHILD; + case Command.DELETE_ATTRIBUTE: + return NUM_DELETE_ATTRIBUTE; + default: + break; + } + return 0; + } + + public static Command getCommand (int num) { + switch(num) { + case NUM_PUT_ATTRIBUTE: + return Command.PUT_ATTRIBUTE; + case NUM_APPEND_CHILD: + return Command.APPEND_CHILD; + case NUM_DELETE_CHILD: + return Command.DELETE_CHILD; + case NUM_DELETE_ATTRIBUTE: + return Command.DELETE_ATTRIBUTE; + default: + break; + } + return Command.DEFAULT; + } + + public Command getCommand() { + return getCommand(commandType); + } + + public int getPosition () { + return this.Position; + } + + public string getKey () { + return this.Key; + } + + public byte[] getValue() { + return this.Value; + } + + public Either invoke (TreeNode target) { + switch(getCommand(commandType)) { + case Command.PUT_ATTRIBUTE: + return target.getAttributes().put(this.Key, this.Value); + case Command.APPEND_CHILD: + return target.getChildren().addNewChildAt(this.Position); + case Command.DELETE_CHILD: + return target.getChildren().deleteChildAt(this.Position); + case Command.DELETE_ATTRIBUTE: + return target.getAttributes().delete(this.Key); + } + return null; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkNodeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkNodeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a93113f1e8c17b44591080188dcb527f +timeCreated: 1477182788 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkNodePath.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkNodePath.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,86 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +public class NetworkNodePath : NodePath { + LinkedList Path; + + public NetworkNodePath () { + Path = new LinkedList(); + Path.AddFirst(-1); + } + + public NetworkNodePath (NodePath path){ + Path = new LinkedList(); + foreach(int p in path) { + Path.AddLast(p); + } + } + + // msg pack ni pointer wo watasenai point youso wo narabikaeru. + private NetworkNodePath (LinkedList path) { + this.Path = path; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + foreach(var l in Path) { + yield return l; + } + } + + public NodePath add (int pos) { + LinkedList newPath = copyPath(); + newPath.AddLast(pos); + return new NetworkNodePath(newPath); + } + + public NodePath addHead(int pos) { // still java code. + LinkedList newPath = copyPath(); + newPath.AddFirst(pos); + return new NetworkNodePath(newPath); + } + + public Pair pop () { + LinkedList cPath = copyPath(); + int e = cPath.First.Value; + cPath.RemoveFirst(); + return new Pair(e, new NetworkNodePath(cPath)); + } + + public int size () { + return this.Path.Count; + } + + + public LinkedList copyPath(){ + LinkedList newPath = new LinkedList(); + foreach(int i in this.Path) { + newPath.AddLast(i); + } + return newPath; + } + + public override string ToString () { + return Path.ToString(); + } + + public NodePath tail() { + this.Path.RemoveLast(); + return new NetworkNodePath(this.Path); + } + + public Pair last () { + int lastValue = this.Path.Last.Value; + this.Path.RemoveLast(); + return new Pair(lastValue, new NetworkNodePath(this.Path)); + } + + + +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkNodePath.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkNodePath.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 54136bbf1dff4da47b979daf7cbdf8e8 +timeCreated: 1477182806 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkPutAttributeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkPutAttributeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkPutAttributeOperation : NodeOperation { + + public string Key; + public byte[] Value; + + public NetworkPutAttributeOperation() { + this.Key = null; + this.Value = null; + } + + public NetworkPutAttributeOperation(string key, byte[] value){ + this.Key = key; + this.Value = value; + } + + public Command getCommand () { + return Command.PUT_ATTRIBUTE; + } + + public Either invoke (TreeNode target) { + return target.getAttributes().put(this.Key, this.Value); + } + + public string getKey () { + return this.Key; + } + + public int getPosition () { + return -1; + } + + public byte[] getValue () { + return this.Value; + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkPutAttributeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkPutAttributeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ee9feef7044972c46915075386db85ee +timeCreated: 1477182838 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkTreeOperation.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkTreeOperation.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,56 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkTreeOperation : TreeOperation { + + public NetworkNodePath Path; + public NetworkNodeOperation Operation; + + public NetworkTreeOperation (TreeOperation tOp) { + this.Path = new NetworkNodePath(tOp.getNodePath()); + this.Operation = new NetworkNodeOperation(tOp.getNodeOperation()); + } + + public NetworkTreeOperation(NodePath path, NodeOperation op) { + this.Path = new NetworkNodePath(path); + this.Operation = new NetworkNodeOperation(op); + } + + public NetworkTreeOperation(NetworkNodePath path, NodeOperation op) { + this.Path = path; + this.Operation = new NetworkNodeOperation(op); + } + + public NetworkTreeOperation(NodePath path, NetworkNodeOperation op) { + this.Path = new NetworkNodePath(path); + this.Operation = op; + } + + public NetworkTreeOperation(NetworkNodePath path, NetworkNodeOperation op) { + this.Path = path; + this.Operation = op; + } + + public NodePath getNodePath () { + return this.Path; + } + + public NodeOperation getNodeOperation() { + Command c = this.Operation.getCommand(); + switch(c){ + case Command.PUT_ATTRIBUTE: + return new PutAttributeOperation(Operation.getKey(), Operation.getValue()); + case Command.APPEND_CHILD: + return new AppendChildAtOperation(Operation.getPosition()); + case Command.DELETE_CHILD: + return new DeleteChildAtOperation(Operation.getPosition()); + case Command.DELETE_ATTRIBUTE: + return new DeleteAttributeOperation(Operation.getKey()); + default: + break; + } + return null; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkTreeOperation.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkTreeOperation.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ee4868a776e4c43409ce02cfeb3d5721 +timeCreated: 1477182669 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkTreeOperationLog.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkTreeOperationLog.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,111 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace JungleDB { + public class NetworkTreeOperationLog : TreeOperationLog { + + public LinkedList list; + public int Size; + public string Uuid; + public string TreeName; + public long TimeStamp; + + + public NetworkTreeOperationLog () { + list = new LinkedList(); + this.Size = 0; + this.TreeName = ""; + this.TimeStamp = DateTime.Now.ToBinary(); + } + + public NetworkTreeOperationLog(string uid, string name, IEnumerable _list) { + this.list = new LinkedList(); + this.Uuid = uid; + this.Size = 0; + this.TreeName = name; + this.TimeStamp = DateTime.Now.ToBinary(); + foreach(var op in _list) { + NetworkTreeOperation nOp = new NetworkTreeOperation(op); + this.list.AddLast(nOp); + } + this.Size = this.list.Count; + } + + public NetworkTreeOperationLog (string uid, string name, IEnumerable _list, long timestamp) { + this.Uuid = uid; + this.TreeName = name; + this.list = new LinkedList(); + this.Size = 0; + this.TimeStamp = timestamp; + foreach(var op in _list) { + NetworkTreeOperation nOp = new NetworkTreeOperation(op); + this.list.AddLast(nOp); + } + this.Size = this.list.Count; + } + + public NetworkTreeOperationLog (IEnumerable _list) { + this.Uuid = ""; + this.TreeName = ""; + this.list = new LinkedList(); + this.Size = 0; + this.TimeStamp = DateTime.Now.ToBinary(); + foreach(var op in _list) { + NetworkTreeOperation nOp = new NetworkTreeOperation(op); + this.list.AddLast(nOp); + } + this.Size = this.list.Count; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + foreach(NetworkTreeOperation l in list){ + yield return l; + } + } + + + public TreeOperationLog add (NodePath path, NodeOperation op) { + NetworkTreeOperation nOp = new NetworkTreeOperation(path, op); + this.list.AddLast(nOp); + this.Size = list.Count; + return this; + } + + public TreeOperationLog append (TreeOperationLog log) { + foreach(TreeOperation o in log) { + NetworkTreeOperation op = new NetworkTreeOperation(o); + this.list.AddLast(op); + } + this.Size = list.Count; + return this; + } + + public int length () { + return this.list.Count; + } + + public string getUuid() { + return Uuid; + } + + public string getTreeName () { + return TreeName; + } + + public long getTimeStamp () { + return TimeStamp; + } + + public void setTimeStamp (long timestamp) { + this.TimeStamp = timestamp; + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/operations/NetworkTreeOperationLog.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/operations/NetworkTreeOperationLog.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 758f73b66fc36284caed167808ba0209 +timeCreated: 1477182906 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bd875ffece3a28d4482f99cc5c4b82a1 +folderAsset: yes +timeCreated: 1477167872 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkDefaultJungleTree.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkDefaultJungleTree.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,81 @@ +using UnityEngine; +using System.Collections; + +namespace JungleDB { + public class NetworkDefaultJungleTree : JungleTree { + + private readonly AtomicReference 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(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 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.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); + } + } + string oldTreeUuid = this.Uuid + revision().ToString(); + JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, this.Writer, this.Editor); + return DefaultEither.newB(oldTree); + } + + public TreeMap>> getIndex () { + TreeContext tc = this.Repository.Get(); + return tc.getIndex(); + } + + public Either getNodeOfPath (NodePath path) { + TreeNode node = this.Repository.Get().getRoot(); + foreach(var num in path) { + if (num == -1) { + continue; + } + Either either = node.getChildren().at(num); + if (either.isA()){ + return either; + } + node = either.b(); + } + return DefaultEither.newB(node); + } + + public void setBufferSize (int num) { + + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkDefaultJungleTree.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkDefaultJungleTree.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 961f2b32e10f1f44eaeeb34a1d96605c +timeCreated: 1477167905 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkDefaultJungleTreeEditor.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkDefaultJungleTreeEditor.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,184 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace JungleDB { + public class NetworkDefaultJungleTreeEditor : JungleTreeEditor { + private readonly TransactionManager TxManager; + private readonly TreeNode Root; + private readonly TreeEditor Editor; + private readonly string TreeName; + private readonly TreeOperationLog Log; + private bool ExportLog; + + public NetworkDefaultJungleTreeEditor(string tname, TreeNode root, TransactionManager txMan, TreeEditor edit) + { + this.TreeName = tname; + this.Root = root; + this.TxManager = txMan; + this.Editor = edit; + this.Log = new DefaultTreeOperationLog(); + this.ExportLog = true; + } + + public NetworkDefaultJungleTreeEditor(string tname, TreeNode root, TransactionManager txMan, TreeEditor edit, TreeOperationLog log) { + this.TreeName = tname; + this.Root = root; + this.TxManager = txMan; + this.Editor = edit; + this.Log = log; + this.ExportLog = true; + } + + public static NetworkDefaultJungleTreeEditor NewLocalTreeEditor(string tname, TreeNode root, TransactionManager txMan, TreeEditor edit) { + NetworkDefaultJungleTreeEditor treeEditor = new NetworkDefaultJungleTreeEditor(tname, root, txMan, edit, new DefaultTreeOperationLog()); + treeEditor.ExportLog = false; + return treeEditor; + } + + public static NetworkDefaultJungleTreeEditor NewLocalTreeEditor(string tname, TreeNode root, TransactionManager txMan, TreeEditor edit, TreeOperationLog log) { + NetworkDefaultJungleTreeEditor treeEditor = new NetworkDefaultJungleTreeEditor(tname, root, txMan, edit, log); + treeEditor.ExportLog = false; + return treeEditor; + } + + + private Either TreeEditor(NodePath path, NodeEditor editor) + { + //LoggingNodeHook hook = new LoggingNodeHook(_e); + Either either = this.Editor.edit(this.Root, path, editor); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + + TreeNode newNode = either.b().getWrap(); + OperationLog newLog = either.b().getOperationLog(); + + // IterableConverter.Converter converter = new IterableConverter.Converter(){ + // public TreeOperation conv(NodeOperation _b){ + // return new DefaultTreeOperation(_path,_b); + // } + // }; + + // I must fix this code. + IterableConverter.Converter converter = new InnerConverter(path); + + IEnumerable iterable = new IterableConverter(newLog, converter); + DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog(iterable,newLog.length()); + TreeOperationLog newTreeOpLog = Log.append(treeOperationLog); + + JungleTreeEditor newEditor; + if(this.ExportLog) { + newEditor = new NetworkDefaultJungleTreeEditor(this.TreeName, newNode, this.TxManager, this.Editor, newTreeOpLog); + } else { + newEditor = NetworkDefaultJungleTreeEditor.NewLocalTreeEditor(this.TreeName, newNode, TxManager, this.Editor, newTreeOpLog); + } + return DefaultEither.newB(newEditor); + } + + + public Either addNewChildAt(NodePath _path, int _pos) + { + AppendChildAt appendChildAt = new AppendChildAt(_pos); + return this.TreeEditor(_path,appendChildAt); + } + + public Either deleteChildAt(NodePath _path, int _pos) + { + DeleteChildAt deleteChildAt = new DeleteChildAt(_pos); + return this.TreeEditor(_path,deleteChildAt); + } + + public Either putAttribute(NodePath _path, string _key, byte[] _value) + { + PutAttribute putAttribute = new PutAttribute(_key,_value); + return this.TreeEditor(_path,putAttribute); + } + + public Either deleteAttribute(NodePath _path, string _key) + { + DeleteAttribute deleteAttribute = new DeleteAttribute(_key); + return this.TreeEditor(_path,deleteAttribute); + } + + public Either edit(NodePath _path, NodeEditor _editor) + { + return this.TreeEditor(_path,_editor); + } + + public Either commit() + { + Either either = TxManager.commit(this.Root, this.Log); + if(either.isA()){ + return DefaultEither.newA(either.a()); + } + // if(this.ExportLog) { + // try { + // putTreeOperationLog(this.Log); + // } catch (IOException e) { + // return DefaultEither.newA(either.a()); + // } + // } + + TransactionManager newTxManager = either.b(); + JungleTreeEditor newTreeEditor = new NetworkDefaultJungleTreeEditor(this.TreeName, this.Root, newTxManager, this.Editor); + + return DefaultEither.newB(newTreeEditor); + } + + private string getID() + { + return this.TxManager.getUUID(); + } + + private string getRevision() + { + return this.TxManager.getRevision().ToString(); + } + + public string getTreeName() { + return this.TreeName; + } + + public TreeOperationLog getTreeOperationLog() { + return this.Log; + } + + public void putTreeOperationLog(IEnumerable newLog) { + string uuid = getID(); + string treeName = getTreeName(); + string updaterName = getID(); + string revision = getRevision(); + putDataSegment(uuid, treeName, updaterName, newLog, revision); + } + + public void putDataSegment(string _uuid, string _treeName, string _updaterName, IEnumerable newLog, string nextRevision) { + // NetworkTreeOperationLog netLog = new NetworkTreeOperationLog(_uuid, _treeName,newLog); + // CodeSegment cs = new LogPutCodeSegment(netLog); + // cs.execute(); + } + + public Either replaceNewRootNode() { + // TODO Auto-generated method stub + return null; + } + + public Either flushSuccess() { + // TODO Auto-generated method stub + return null; + } + + public class InnerConverter : IterableConverter.Converter{ + NodePath path; + + public InnerConverter(NodePath _path) { + path = _path; + } + + + public TreeOperation conv(NodeOperation _b){ + return new DefaultTreeOperation(path,_b); + } + } + } +} diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkDefaultJungleTreeEditor.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkDefaultJungleTreeEditor.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b981bd70e7fb67f44907a9a37cfe3216 +timeCreated: 1477167925 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkTransactionManager.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkTransactionManager.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,91 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + + +namespace JungleDB { + public class NetworkTransactionManager : TransactionManager { + + private readonly AtomicReference Repository; + private readonly TreeContext TContext; + private readonly ChangeListWriter Writer; + private readonly string Uuid; + private readonly string TreeName; + + public NetworkTransactionManager (string name, ChangeListWriter writer, TreeContext tcon, AtomicReference repo, string uid) { + this.Repository = repo; + this.TContext = tcon; + this.Writer = writer; + this.Uuid = uid; + this.TreeName = name; + } + + public Either commit (TreeNode newRoot, TreeOperationLog log) { + long currentRevision = this.TContext.getRevision(); + long nextRevision = currentRevision + 1; + + ChangeList list = new InnerChangeList(this.Uuid, this.TreeName); + + InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); + // not create index. + TreeContext newTreeContext = new DefaultTreeContext(newRoot, this.TContext, list, this.Uuid, this.TreeName, nextRevision, traverser); + if (this.Repository.CompareAndSet(newTreeContext.prev(), newTreeContext)) { + TransactionManager txmanager = new NetworkTransactionManager(this.TreeName, this.Writer, newTreeContext, this.Repository, this.Uuid); + return DefaultEither.newB(txmanager); + } + + return DefaultEither.newA((Error) new DefaultError()); + } + + public long getRevision () { + return this.TContext.getRevision(); + } + + public string getUUID () { + return this.Uuid; + } + + public Either firstcommit(TreeNode _newRoot, TreeOperationLog _log) { + return null; + } + + public class InnerChangeList : ChangeList { + string uuid; + string name; + + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return iterator (); + } + + // construct + public InnerChangeList(string _uuid, string _name) { + this.uuid = _uuid; + this.name = _name; + } + + public IEnumerator iterator() { + List nil = new List(); + return nil.iterator(); + } + + public string uuids() { + return uuid; + } + + public string getTreeName() { + return name; + } + + public TreeOperationLog getLog() { + return new DefaultTreeOperationLog(); + } + } + } +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Main/jungle-network/transaction/NetworkTransactionManager.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Main/jungle-network/transaction/NetworkTransactionManager.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4493af1098d33764ca8f9b365965772c +timeCreated: 1477167942 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 50122c8679badb54b964a3e9336c34c6 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62d0c1b98370c2c4ca3ce02800af6b9a +folderAsset: yes +timeCreated: 1477181989 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/DefaultJungleTreeTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/DefaultJungleTreeTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,15 @@ +using UnityEngine; +using System; +//using System.Diagnostics; +using JungleDB; + +public class DefaultJungleTreeTest : MonoBehaviour { + + + public SceneNode mapping; + public NodePath path; + + private void Start () { + } + +} \ No newline at end of file diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/DefaultJungleTreeTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/DefaultJungleTreeTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4a08a29d6175c934e88cd50ebb80aaf9 +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 196797abb53d5ea45bdfe909797d2059 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aeb87cfb1069a22469bb479141365e2f +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/ListTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/ListTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,26 @@ +using UnityEngine; +using System.Collections; + +public class ListTest : MonoBehaviour { + + public List list; + + // Use this for initialization + void Start () { + list = new List (); + for(int i=0; i< 5; i++){ + list = list.add(i, i); + } + + foreach (var l in list){ + print(l); + } + + + } + + // Update is called once per frame + void Update () { + + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/ListTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/ListTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b3c18bcc3a6581e4d94ecf309ef6eb6a +timeCreated: 1477228435 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/deleteTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/deleteTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; + +public class deleteTest : MonoBehaviour { + + void Start () { + List list = new List(); + + for(int count = 0; count < 10; count++){ + list = list.addLast(count); + } + List newList = list.delete(5); + Debug.Log(list.getHead().length()); + Debug.Log (newList.getHead ().length ()); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/deleteTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/deleteTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b61f5609d8805194d950a1a2a438b2de +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/listAdd.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/listAdd.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,31 @@ +using UnityEngine; +using System.Collections; +using System; + +public class listAdd : MonoBehaviour { + + void Start () { + List list = new List (); + List list2 = new List (); + Debug.Log ("------ここまで001-------"); + for (int count = 0; count < 10; count++) { + list = list.addLast (count); + list2 = list2.add (count, count); + } + Debug.Log ("------ここまで002-------"); + + for (int count = 0; count < 10; count++) { + int num = list.index (count); + int num2 = list2.index (count); + Equals (num, count); + Equals (num2, count); + } + Debug.Log ("------ここまで003-------"); + List newList = list.add (5, 50); + int nums = list.index (5); + int nums2 = newList.index (5); + Equals (nums, 5); + Equals (nums2, 50); + Debug.Log("------------- end -------------"); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/listAdd.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/listAdd.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f73226154ac8d2d4188fa0dc88b67387 +timeCreated: 1477164413 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/replaceTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/replaceTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,18 @@ +using UnityEngine; + +public class replaceTest : MonoBehaviour { + + // Use this for initialization + void Start () { + List list = new List (); + for (int count = 0; count < 10; count++) { + list = list.addLast (count); + Debug.Log("list" + list.tail()); + } + List newList = list.replace (5, 15); + int attribute = list.index (5); + Debug.Log (attribute); + attribute = newList.index (5); + Debug.Log (attribute); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/list/replaceTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/list/replaceTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cbc201cf77ae0a545950d63b64365ba5 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/treemap.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/treemap.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ca12742b2dd4ce428f7d1c06a66fffe +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/treemap/TreeMapDelete.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/treemap/TreeMapDelete.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,26 @@ +using UnityEngine; +using JungleDB; +public class TreeMapDelete : MonoBehaviour { + + // Use this for initialization + void Start () { + TreeMap map = new TreeMap (); + for (int count = 1; count < 6; count++) { + map = map.put (count, count); + map.checkDepth (); + } + + // ただ消すための数字をここに入れているだけ + List list = new List(); + 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(); + } + Debug.Log ("end"); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/treemap/TreeMapDelete.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/treemap/TreeMapDelete.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dac8f8ba589367e409f99097a2a18e81 +timeCreated: 1477164412 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/treemap/TreeMapTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/treemap/TreeMapTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,21 @@ +using UnityEngine; +using System.Collections; +using JungleDB; + +public class TreeMapTest : MonoBehaviour { + private int ReturnNumber; + // Update is called once per frame + public void Start () { + TreeMap map = new TreeMap(); + Debug.Log (map); + for (int count = 5; count > -10; count--) { + map = map.put(count, count); + map.checkDepth(); + Debug.Log("------------------------------------------"); + + + } + + } +} + diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/data/treemap/TreeMapTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/data/treemap/TreeMapTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 50289f6e88358cf4795760332fcd0aeb +timeCreated: 1477164411 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/jungle.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/jungle.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2087c19ec17ad5542a164ae5fa285e02 +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/jungle/core.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/jungle/core.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e533683dd75d354439ba584a2d5f019f +folderAsset: yes +timeCreated: 1477164409 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/jungle/core/nodeeditor.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/jungle/core/nodeeditor.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: efd61b5398dbd0a498a5c9d96a5f8a86 +folderAsset: yes +timeCreated: 1477164410 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/jungle/core/nodeeditor/PutAttributeTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/jungle/core/nodeeditor/PutAttributeTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,29 @@ +using UnityEngine; +using System.Collections; +using JungleDB; + +public class PutAttributeTest : MonoBehaviour { + + string key = "hoge"; + public byte[] value; + + // Use this for initialization + void Start () { + TreeNode node = new DefaultTreeNode (); + PutAttribute op = new PutAttribute (key, value); + + Either either = op.edit (node); + if (either.isA ()) { + Debug.Log ("Error発生"); + } + LoggingNode newnode = either.b (); + Debug.Log (newnode); + byte[] ret = newnode.getAttributes ().get (key); + Debug.Log ("insertしたものは" + ret); + } + + // Update is called once per frame + void Update () { + + } +} diff -r 0865819106cf -r 1f99e150f336 Test/junge-main/jungle/core/nodeeditor/PutAttributeTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/junge-main/jungle/core/nodeeditor/PutAttributeTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3231ebfd94c122c42baa88724bff44c4 +timeCreated: 1477164410 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 47c2c983ab083414da0d14bbc465bf45 +folderAsset: yes +timeCreated: 1477182016 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5509027eeb4c8244aa9b84f46050354e +folderAsset: yes +timeCreated: 1477193336 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkAppendChildOperationTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkAppendChildOperationTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,20 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using JungleDB; +// http://qiita.com/snaka/items/8da9f89deeef17b1923a +// message pack refarence URL. +public class NetworkAppendChildOperationTest : MonoBehaviour { + + // Use this for initialization + void Start () { + NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1); + ObjectPacker pack = new ObjectPacker(); + byte[] value = pack.Pack(op); + + // unpackage + ObjectPacker unpack = new ObjectPacker(); + NetworkAppendChildAtOperation mOp = unpack.Unpack(value); + print(mOp.getPosition()); // add position 1 , get what number? + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkAppendChildOperationTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkAppendChildOperationTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9aedcde9dd862ca4a9f68c2b93f2885f +timeCreated: 1477193383 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkDeleteAttributeOperationTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkDeleteAttributeOperationTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,19 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using JungleDB; + +public class NetworkDeleteAttributeOperationTest : MonoBehaviour { + + // Use this for initialization + void Start () { + NetworkDeleteAttributeOperation op = new NetworkDeleteAttributeOperation("hoge"); + ObjectPacker pack = new ObjectPacker(); + byte[] value = pack.Pack(op); + + // unpackage + ObjectPacker unpack = new ObjectPacker(); + NetworkDeleteAttributeOperation mOp = unpack.Unpack(value); + print(mOp.getKey()); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkDeleteAttributeOperationTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkDeleteAttributeOperationTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0242d318d5e71b241941217f604777a9 +timeCreated: 1477194171 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkDeleteChildAtOperationTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkDeleteChildAtOperationTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,20 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using JungleDB; + +public class NetworkDeleteChildAtOperationTest : MonoBehaviour { + + // Use this for initialization + void Start () { + NetworkDeleteChildAtOperation op = new NetworkDeleteChildAtOperation(1); + ObjectPacker pack = new ObjectPacker(); + byte[] value = pack.Pack(op); + + // unpackage + ObjectPacker unpack = new ObjectPacker(); + NetworkDeleteChildAtOperation mOp = unpack.Unpack(value); + print(mOp.getPosition()); + print(mOp.getCommand()); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkDeleteChildAtOperationTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkDeleteChildAtOperationTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ff4ed3449c18ee04ba0caa4b6d190141 +timeCreated: 1477194398 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkNodeOperationTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkNodeOperationTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,21 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using JungleDB; + +public class NetworkNodeOperationTest : MonoBehaviour { + + // Use this for initialization + void Start () { + NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(3); + NetworkNodeOperation nOp = new NetworkNodeOperation(op); + + ObjectPacker pack = new ObjectPacker(); + byte[] value = pack.Pack(nOp); + + ObjectPacker unpack = new ObjectPacker(); + NetworkNodeOperation mnp = unpack.Unpack(value); + print (mnp.getCommand()); + print (mnp.getPosition()); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkNodeOperationTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkNodeOperationTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 25ca492fb2cb5884db776f2f7c3fa059 +timeCreated: 1477194644 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkPutAttributeOperationTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkPutAttributeOperationTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,23 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using System; +using JungleDB; + +public class NetworkPutAttributeOperationTest : MonoBehaviour { + + // Use this for initialization + void Start () { + byte[] value = System.Text.ASCIIEncoding.UTF8.GetBytes("test"); + NetworkPutAttributeOperation op = new NetworkPutAttributeOperation("hoge", value); + + ObjectPacker pack = new ObjectPacker(); + // send this byte to server. + byte[] packValue = pack.Pack(op); + + ObjectPacker unpack = new ObjectPacker(); + NetworkPutAttributeOperation nOp = unpack.Unpack(packValue); + print(System.Text.ASCIIEncoding.UTF8.GetString(nOp.getValue())); + print (nOp.getCommand()); + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkPutAttributeOperationTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkPutAttributeOperationTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 185c8292459da2a44a94c1d76e5d251f +timeCreated: 1477194944 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkTreeOperationLogTest.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkTreeOperationLogTest.cs Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,26 @@ +using UnityEngine; +using System.Collections; +using MsgPack; +using JungleDB; + +public class NetworkTreeOperationLogTest : MonoBehaviour { + + // Use this for initialization + void Start () { // not work yet 10/23 13:33 + NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1); + NetworkNodePath path = new NetworkNodePath(); + NodePath npath = (NodePath)path.add(1); + +// NetworkTreeOperationLog log = new NetworkTreeOperationLog(); +// log.add(npath, op); +// ObjectPacker pack = new ObjectPacker(); +// byte[] value = pack.Pack(log); +// +// // unpackage +// ObjectPacker unpack = new ObjectPacker(); +// NetworkTreeOperationLog mOp = unpack.Unpack(value); +// foreach (var m in mOp) { +// print(m.getNodeOperation()); +// } + } +} diff -r 0865819106cf -r 1f99e150f336 Test/jungle-network/operations/NetworkTreeOperationLogTest.cs.meta --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/jungle-network/operations/NetworkTreeOperationLogTest.cs.meta Thu Dec 15 22:52:48 2016 +0900 @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e8c5ae253dc17b94a906bb96cb6bee25 +timeCreated: 1477195600 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: