view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/DefaultTreeOperationLog.java @ 177:75422f82e6b6 oldCommit

miner change
author tatsuki
date Sun, 15 Mar 2015 14:57:26 +0900
parents ed890dcb673e
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;

import java.util.Iterator;

import com.google.common.collect.Iterables;
import fj.data.List;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;

public class DefaultTreeOperationLog implements TreeOperationLog
{
	private final Iterable<TreeOperation> list;
	private final int size;
	
	public DefaultTreeOperationLog()
	{
		list = List.nil();
		size = 0;
	}
	
	public DefaultTreeOperationLog(Iterable<TreeOperation> _list,int _size)
	{
		list = _list;
		size = _size;
	}

	@Override
	public Iterator<TreeOperation> iterator()
	{
		return list.iterator();
	}

	@Override
	public TreeOperationLog add(NodePath _p, NodeOperation _op)
	{
		TreeOperation op = new DefaultTreeOperation(_p,_op);
		List<TreeOperation> newList = List.list(op);
		Iterable<TreeOperation> concat = Iterables.concat(list,newList);
		
		return new DefaultTreeOperationLog(concat,size + 1);
	}
	
	@Override
	public TreeOperationLog append(TreeOperationLog _log)
	{
		int argumentLogSize = _log.length();
		Iterable<TreeOperation> concat = Iterables.concat(list,_log);
		
		return new DefaultTreeOperationLog(concat,argumentLogSize + size);
	}

	@Override
	public int length()
	{
		return size;
	}

}