view src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-main/store/impl/logger/LoggingChildren.cs @ 17:01a08cf4b2d9

Liq Files
author Kazuma
date Mon, 07 Nov 2016 01:05:24 +0900
parents abe0c247f5a5
children
line wrap: on
line source

using System.Collections;
using UnityEngine;

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)
	{
		Debug.Log ("in addNewChild");
		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);
	}

}