public static bool DeepEquals([NotNull] ITuple x, [NotNull] ITuple y, [NotNull] IEqualityComparer comparer) { Contract.Requires(x != null && y != null && comparer != null); using (var xs = x.GetEnumerator()) using (var ys = y.GetEnumerator()) { while (xs.MoveNext()) { if (!ys.MoveNext()) { return(false); } if (!comparer.Equals(xs.Current, ys.Current)) { return(false); } } return(!ys.MoveNext()); } }
public static int StructuralCompare(ITuple x, ITuple y, [NotNull] IComparer comparer) { Contract.Requires(comparer != null); if (object.ReferenceEquals(x, y)) { return(0); } if (object.ReferenceEquals(x, null)) { return(-1); } if (object.ReferenceEquals(y, null)) { return(1); } using (var xs = x.GetEnumerator()) using (var ys = y.GetEnumerator()) { while (xs.MoveNext()) { if (!ys.MoveNext()) { return(1); } int cmp = comparer.Compare(xs.Current, ys.Current); if (cmp != 0) { return(cmp); } } return(ys.MoveNext() ? -1 : 0); } }
public IEnumerator <object> GetEnumerator() { return(m_items.GetEnumerator()); }