示例#1
0
 public AnalysisSetTwoUnion(AnalysisProxy value1, AnalysisProxy value2, UnionComparer comparer)
 {
     Debug.Assert(!comparer.Equals(value1, value2));
     Value1    = value1;
     Value2    = value2;
     _comparer = comparer;
 }
示例#2
0
            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;
            }
示例#3
0
 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));
     }
 }
示例#4
0
 public AnalysisSetOneUnion(AnalysisProxy value, UnionComparer comparer)
 {
     Value     = value;
     _comparer = comparer;
 }
示例#5
0
 public AnalysisSetEmptyUnion(UnionComparer comparer)
 {
     _comparer = comparer;
 }