view Main/jungle-main/transaction/DefaultTreeNodeAttribute.cs @ 32:07318c10b894

add getBytes method.
author Kazuma Takeda
date Fri, 20 Jan 2017 07:43:43 +0900
parents 1466993c104c
children f2ea780b3e80
line wrap: on
line source

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace JungleDB {
	public class DefaultTreeNodeAttribute : TreeNodeAttributes {
		public List<TreeNode> children;
		public TreeMap<string, object> attrs;

		public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<string, object> _attrs){
			children = _children;
			attrs = _attrs;
		}

		public TreeMap<string, object> getAttributesAsRawMap(){
			return attrs;
		}

		public Either<Error, TreeNode> delete(string _key) {
			if (_key == null) {
				return DefaultEither<Error,TreeNode>.newA (NodeEditorError.NULL_VALUE_NOT_ALLOWED);
			}

			if (null == attrs.getRoot()) {
				return DefaultEither<Error,TreeNode>.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
			}

			TreeMap<string, object> newMap = attrs.delete(_key);
			TreeNode newNode = new DefaultTreeNode(children, newMap);
			return DefaultEither<Error,TreeNode>.newB(newNode);
		}

		public Either<Error, TreeNode> put(string _key, object _value){
			if (_key == null || _value == null) {
				return DefaultEither<Error, TreeNode>.newA (NodeEditorError.NULL_VALUE_NOT_ALLOWED);
			}

			TreeMap<string, object> newMap = attrs.put (_key, _value);

			TreeNode newNode = new DefaultTreeNode (children, newMap);

			return DefaultEither<Error, TreeNode>.newB (newNode);
		}

		public object get(string _key) {
			if (_key == null)
				return null;
			
			object op = attrs.get(_key);
			if (op != null)
				return op;
			return null;
		}

		public T get<T> (string _key) {
			if (_key == null)
				return default(T);

			T op = (T)attrs.get (_key);
			if (op != null)
				return op;
			return default(T);
		}

		public string getString(string key) {
			return attrs.get(key).ToString();
		}

		/// <summary>
		/// Gets the bytes.
		/// need Serializable to class.
		/// </summary>
		/// <returns>byte[]</returns>
		/// <param name="key">Key.</param>
		public byte[] getBytes(string key)
		{
			var formatter = new BinaryFormatter();
			object source = attrs.get (key);
			using (var stream = new MemoryStream())
			{
				formatter.Serialize(stream, source);                
				return stream.ToArray();
			}
		}

		public IEnumerator<string> getKeys(){
			return attrs.keys ();
		}

	}
}