view Main/jungle-main/store/impl/DefaultNodePath.cs @ 28:9588ad364fdd

Last commit before change.
author Kazuma Takeda
date Wed, 18 Jan 2017 19:53:29 +0900
parents 1f99e150f336
children f2ea780b3e80
line wrap: on
line source

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

namespace JungleDB {
	public class DefaultNodePath : NodePath {
		private List<int> path = new List<int>();

		IEnumerator IEnumerable.GetEnumerator()
		{
			// call the generic version of the method
			return this.GetEnumerator();
		}

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

		public DefaultNodePath() {
			path = new List<int> ().addLast (-1);
		}

		private DefaultNodePath(List<int> path) {
			this.path = path;
		}

		/// <summary>
		/// Listに追加します。
		/// path = path.add(0)を2回する
		/// path = path.add(0).add(0)する
		/// これは同じ
		/// </summary>
		/// <param name="pos">Position.</param>

		public NodePath add(int pos) {
			List<int> newPath = path.addLast(pos);
			return new DefaultNodePath(newPath);
		}

		public Pair<int, NodePath> pop() {
			int head = path.headList();
			List<int> tail = path.deleteHead();
			return new Pair<int, NodePath>(head, new DefaultNodePath(tail));
		}

		public Pair<int, NodePath> last() {
			int last = path.headList();
			List<int> list = path.deleteHead();
			return new Pair<int, NodePath>(last, new DefaultNodePath(list));
		}

		public override string ToString() {
			string s = "List <";
			int list_count = this.path.length();
			int count = 0;
			foreach(var i in this.path) {
				if (count != list_count -1){
					s += i.ToString() + ",";
				} else {
					s += i.ToString();
				}
				count++;
			}
			return s + ">";
		}

		public int size() {
			return path.length();
		}

		public NodePath tail() {
			List<int> tail = path.deleteLast ();
			return new DefaultNodePath (tail);
		}

		public List<DefaultNodePath> inits() {
			List<DefaultNodePath> paths = new List<DefaultNodePath> ();
			List<int> coursePath = new List<int> ();
			foreach (int tmpPath in path) {
				List<int> tmp = coursePath.addLast (tmpPath);
				paths = paths.addLast (new DefaultNodePath (tmp));
				coursePath = tmp;
			}
			return paths;
		}
	}
}