public AnalysisSetTwoUnion(AnalysisProxy value1, AnalysisProxy value2, UnionComparer comparer) { Debug.Assert(!comparer.Equals(value1, value2)); Value1 = value1; Value2 = value2; _comparer = comparer; }
public AnalysisSetTwoUnion(IEnumerable <AnalysisProxy> set, UnionComparer comparer) { _comparer = comparer; var tup = FromEnumerable(set, comparer); if (tup == null || tup.Item2 == null) { throw new InvalidOperationException("Sequence requires exactly two values"); } Value1 = tup.Item1; Value2 = tup.Item2; }
internal static Tuple <AnalysisProxy, AnalysisProxy> FromEnumerable(IEnumerable <AnalysisProxy> set, UnionComparer comparer) { using (var e = set.GetEnumerator()) { if (!e.MoveNext()) { return(new Tuple <AnalysisProxy, AnalysisProxy>(null, null)); } var value1 = e.Current; if (!e.MoveNext()) { return(new Tuple <AnalysisProxy, AnalysisProxy>(value1, null)); } var value2 = e.Current; if (comparer.Equals(e.Current, value1)) { bool dummy; return(new Tuple <AnalysisProxy, AnalysisProxy>(comparer.MergeTypes(value1, value2, out dummy), null)); } if (e.MoveNext()) { return(null); } return(new Tuple <AnalysisProxy, AnalysisProxy>(value1, value2)); } }
public AnalysisSetOneUnion(AnalysisProxy value, UnionComparer comparer) { Value = value; _comparer = comparer; }
public AnalysisSetEmptyUnion(UnionComparer comparer) { _comparer = comparer; }