public LstInternal <A> Subtract(LstInternal <A> rhs) { var self = this; foreach (var item in rhs) { self = self.Remove(item); } return(self); }
/// <summary> /// Ctor /// </summary> Lst(LstInternal <A> root) { value = root; if (root == null) { throw new NullReferenceException(nameof(root)); } if (!default(PRED).True(this)) { throw new ArgumentOutOfRangeException(nameof(value)); } }
/// <summary> /// Ctor /// </summary> Lst(ListItem <A> root, bool rev) { if (root == null) { throw new NullReferenceException(nameof(root)); } value = new LstInternal <A>(root, rev); if (!default(PRED).True(this)) { throw new ArgumentOutOfRangeException(nameof(value)); } }
/// <summary> /// Ctor /// </summary> public Lst(IEnumerable <A> initial) { if (initial == null) { throw new NullReferenceException(nameof(initial)); } value = new LstInternal <A>(initial, default(True <A>)); if (!default(PRED).True(this)) { throw new ArgumentOutOfRangeException(nameof(value)); } }
public bool Equals(LstInternal <A> other) { if (ReferenceEquals(this, other)) { return(true); } if (ReferenceEquals(other, null)) { return(false); } var comparer = EqualityComparer <A> .Default; return(Count == other.Count && this.Zip(other, (x, y) => comparer.Equals(x, y)).ForAll(x => x)); }
public int CompareTo <OrdA>(LstInternal <A> other) where OrdA : struct, Ord <A> { var cmp = Count.CompareTo(other.Count); if (cmp != 0) { return(cmp); } var iterA = GetEnumerator(); var iterB = other.GetEnumerator(); while (iterA.MoveNext() && iterB.MoveNext()) { cmp = default(OrdA).Compare(iterA.Current, iterB.Current); if (cmp != 0) { return(cmp); } } return(0); }
static Lst <PRED, T> Wrap <T>(LstInternal <T> list) => new Lst <PRED, T>(list);
Lst <PRED, A> Wrap(LstInternal <A> list) => new Lst <PRED, A>(list);
public LstInternal <A> Append(LstInternal <A> rhs) => AddRange(rhs);
static Lst <PredList, PREDITEM, T> Wrap <PREDITEM, T>(LstInternal <T> list) where PREDITEM : struct, Pred <T> => new Lst <PredList, PREDITEM, T>(list);
Lst <PredList, PredItem, A> Wrap(LstInternal <A> list) => new Lst <PredList, PredItem, A>(list);
/// <summary> /// Ctor /// </summary> internal Lst(ListItem <A> root, bool rev) { value = new LstInternal <A>(root, rev); }
/// <summary> /// Ctor /// </summary> public Lst(IEnumerable <A> initial) { value = new LstInternal <A>(initial, default(True <A>)); }