view src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-network/operations/NetworkNodePath.cs @ 12:b71d9ea6bd8e

Add Network Operation Class. this codes can not test yet.
author Kazuma
date Sun, 23 Oct 2016 12:25:57 +0900
parents
children 4c8932dad7b2
line wrap: on
line source

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NetworkNodePath : NodePath {
	LinkedList<int> Path;

	public NetworkNodePath () {
		Path = new LinkedList<int>();
		Path.AddFirst(-1);
	}

	public NetworkNodePath (NodePath path){
		Path = new LinkedList<int>();
		foreach(int p in path) {
			Path.AddLast(p);
		}
	}

	private NetworkNodePath (LinkedList<int> path) {
		this.Path = path;
	}

	public IEnumerator<int> iterator () { // iterator error. 
		yield return this.Path.GetEnumerator().Current;
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return this.GetEnumerator();
	}

	public IEnumerator<int> GetEnumerator()
	{
		return iterator ();
	}

	public NodePath add (int pos) {
		LinkedList<int> newPath = copyPath();
		newPath.AddLast(pos);
		return new NetworkNodePath(newPath);
	}

	public NodePath addHead(int pos) { // still java code.
		LinkedList<int> newPath = copyPath();
		newPath.AddFirst(pos);
		return new NetworkNodePath(newPath);
	}

	public Pair<int, NodePath> pop () {
		LinkedList<int> cPath = copyPath();
		int e = cPath.First.Value;
		cPath.RemoveFirst();
		return new Pair<int, NodePath>(e, new NetworkNodePath(cPath));
	}

	public int size () {
		return this.Path.Count;
	}


	public LinkedList<int> copyPath(){
		LinkedList<int> newPath = new LinkedList<int>();
		foreach(int i in this.Path) {
			newPath.AddLast(i);
		}
		return newPath;
	}

	public override string ToString () {
		return Path.ToString();
	}

	public NodePath tail() {
		this.Path.RemoveLast();
		return new NetworkNodePath(this.Path);
	}

	public Pair<int, NodePath> last () {
		int lastValue = this.Path.Last.Value;
		this.Path.RemoveLast();
		return new Pair<int, NodePath>(lastValue, new NetworkNodePath(this.Path));
	}



}