using System.Collections; using System.Collections.Generic; namespace JungleDB { public class NetworkNodePath : NodePath { LinkedList Path; public NetworkNodePath() { Path = new LinkedList(); Path.AddFirst(-1); } public NetworkNodePath(NodePath path) { Path = new LinkedList(); foreach (int p in path) { Path.AddLast(p); } } // msg pack ni pointer wo watasenai point youso wo narabikaeru. private NetworkNodePath(LinkedList path) { this.Path = path; } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } public IEnumerator GetEnumerator() { foreach (var l in Path) { yield return l; } } public NodePath add(int pos) { LinkedList newPath = copyPath(); newPath.AddLast(pos); return new NetworkNodePath(newPath); } public NodePath addHead(int pos) { // still java code. LinkedList newPath = copyPath(); newPath.AddFirst(pos); return new NetworkNodePath(newPath); } public Pair pop() { LinkedList cPath = copyPath(); int e = cPath.First.Value; cPath.RemoveFirst(); return new Pair(e, new NetworkNodePath(cPath)); } public int size() { return this.Path.Count; } public LinkedList copyPath() { LinkedList newPath = new LinkedList(); 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 last() { int lastValue = this.Path.Last.Value; this.Path.RemoveLast(); return new Pair(lastValue, new NetworkNodePath(this.Path)); } } }