view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNodePath.java @ 44:449d67be0886

added tests
author Shoshi TAMAKI
date Sun, 03 Feb 2013 19:46:04 +0900
parents 1c91c4357228
children 95000ff9064d
line wrap: on
line source

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

import java.util.Iterator;

import fj.F;
import fj.data.List;

import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;

public class DefaultNodePath implements NodePath
{
	private final List<Integer> path;
	
	public static void main(String _args[])
	{
		DefaultNodePath p = new DefaultNodePath();
		p = p.add(1).add(2).add(3).add(4);
		System.out.println(p.toString());
	}
	
	public DefaultNodePath()
	{
		path = List.list(-1);
	}
	
	private DefaultNodePath(List<Integer> _path)
	{
		path = _path;
	}

	@Override
	public Iterator<Integer> iterator()
	{
		return path.iterator();
	}

	@Override
	public DefaultNodePath add(int _pos)
	{
		List<Integer> newPath = path.snoc(_pos);
		return new DefaultNodePath(newPath);
	}

	@Override
	public Pair<Integer, NodePath> pop()
	{
		Integer head = path.head();
		List<Integer> tail = path.tail();
		
		return new Pair<Integer,NodePath>(head,new DefaultNodePath(tail));
	}

	@Override
	public String toString()
	{
		return path.toString();
	}
	
	@Override
	public int size()
	{
		return path.length();
	}
	
	public List<DefaultNodePath> inits()
	{
		List<List<Integer>> inits = path.inits();
		inits = inits.filter(new F<List<Integer>,Boolean>(){
			@Override
			public Boolean f(List<Integer> _init){
				return _init.length() != 0;
			}
		});
		
		return inits.map(new F<List<Integer>,DefaultNodePath>(){
			@Override
			public DefaultNodePath f(List<Integer> _path){
				return new DefaultNodePath(_path);
			}
		});
	}
}