view Main/jungle-main/store/impl/logger/LoggingChildren.cs @ 28:9588ad364fdd

Last commit before change.
author Kazuma Takeda
date Wed, 18 Jan 2017 19:53:29 +0900
parents 1f99e150f336
children f2ea780b3e80
line wrap: on
line source

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<Error,LoggingNode> edit(NodeOperation _op)
		{
			Either<Error,TreeNode> either = _op.invoke(wrap);
			if(either.isA()){
				return DefaultEither<Error,LoggingNode>.newA(either.a());
			}

			TreeNode newWrap = either.b();
			OperationLog newLog = log.add(_op);
			LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog);
			return DefaultEither<Error,LoggingNode>.newB(newLoggingNode);
		}

		public Either<Error,LoggingNode> addNewChildAt(int _pos)
		{
			NodeOperation addNewChildAt = new AppendChildAtOperation(_pos);
			return edit(addNewChildAt);
		}

		public Either<Error,LoggingNode> deleteChildAt(int _pos)
		{
			NodeOperation deleteChildAt = new DeleteChildAtOperation(_pos);
			return edit(deleteChildAt);
		}

		public Either<Error,LoggingNode> at(int _pos)
		{
			Children children = wrap.getChildren();
			Either<Error,TreeNode> either = children.at(_pos);
			if(either.isA()){
				return DefaultEither<Error,LoggingNode>.newA(either.a());
			}

			TreeNode node = either.b();
			LoggingNode logNode = new LoggingNode(node);
			return DefaultEither<Error,LoggingNode>.newB(logNode);
		}

	}
}