view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/store/impl/logger/DefaultTreeOperationLog.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
line wrap: on
line source

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

import com.google.common.collect.Iterables;
import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.DefaultTreeOperation;
import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.NodeOperation;
import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.TreeOperation;
import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;

import java.util.Iterator;

public class DefaultTreeOperationLog implements TreeOperationLog
{
	private final Iterable<TreeOperation> list;
	private final int size;
	
	public DefaultTreeOperationLog()
	{
		list = new List<>();
		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 =  new 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;
	}

}