Mercurial > hg > Database > jungle-sharp
view Main/jungle-network/operations/NetworkNodePath.cs @ 41:bd44baa491a9 default tip
add TestJungleCore.cs
author | Kazuma Takeda |
---|---|
date | Thu, 23 Feb 2017 17:19:55 +0900 |
parents | f2ea780b3e80 |
children |
line wrap: on
line source
using System.Collections; using System.Collections.Generic; namespace JungleDB { 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); } } // msg pack ni pointer wo watasenai point youso wo narabikaeru. private NetworkNodePath(LinkedList<int> path) { this.Path = path; } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } public IEnumerator<int> GetEnumerator() { foreach (var l in Path) { yield return l; } } 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)); } } }