using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Perforce.P4 { public class SimpleListItem { public SimpleListItem(T item) { Item = item; Next = null; } public T Item { get; private set; } public SimpleListItem Next { get; internal set; } } public class SimpleList { public SimpleList() { Count = 0; Head = null; Tail = null; } public SimpleListItem Head { get; private set; } public SimpleListItem Tail { get; private set; } public int Count { get; private set; } public int Add(T item) { if (Tail == null) { Head = new SimpleListItem(item); Tail = Head; } else { Tail.Next = new SimpleListItem(item); Tail = Tail.Next; } Count++; return Count; } public override string ToString() { if (Head == null) { return null; } StringBuilder sb = new StringBuilder(Count * 80); SimpleListItem curItem = Head; int idx = 0; while ((curItem != null) && (idx < Count)) { if (idx > 0) { sb.Append("\r\n"); } sb.Append(curItem.Item.ToString()); curItem = curItem.Next; } return sb.ToString(); } public T[] ToArray() { if (Head == null) { return null; } T[] value = new T[Count]; SimpleListItem curItem = Head; int idx = 0; while ((curItem != null) && (idx < Count)) { value[idx++] = curItem.Item; curItem = curItem.Next; } return value; } public static explicit operator T[](SimpleList l) { return l.ToArray(); } public static explicit operator List(SimpleList l) { if (l.Head == null) { return null; } List value = new List(l.Count); SimpleListItem curItem = l.Head; while (curItem != null) { value.Add(curItem.Item); curItem = curItem.Next; } return value; } } }