Пример #1
0
        public override bool Equals(T[] x, T[] y)
        {
            if (x == null)
            {
                if (y == null)
                {
                    return(true);
                }
                return(false);
            }
            if (y == null)
            {
                return(false);
            }
            int r = x.Length - y.Length;

            if (r != 0)
            {
                return(false);
            }
            for (int i = x.Length - 1; i >= 0; i--)
            {
                if (!BaseComparer.Equals(x[i], y[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
 public override bool Equals(Pair <T> x, Pair <T> y)
 {
     if (!BaseComparer.Equals(x.First, y.First))
     {
         return(false);
     }
     return(BaseComparer.Equals(x.Second, y.Second));
 }
Пример #3
0
 public override bool Equals(TEnumerable x, TEnumerable y)
 {
     if (x == null)
     {
         if (y == null)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         if (y == null)
         {
             return(false);
         }
         else
         {
             IEnumerator <T> ex = x.GetEnumerator();
             IEnumerator <T> ey = y.GetEnumerator();
             while (true)
             {
                 bool hasX = ex.MoveNext();
                 bool hasY = ey.MoveNext();
                 if (!hasX)
                 {
                     if (!hasY)
                     {
                         return(true);
                     }
                     else
                     {
                         return(false);
                     }
                 }
                 else
                 {
                     if (!hasY)
                     {
                         return(false);
                     }
                     else
                     {
                         if (!BaseComparer.Equals(ex.Current, ey.Current))
                         {
                             return(false);
                         }
                     }
                 }
             }
         }
     }
 }
Пример #4
0
        // Constructors

        public EnumComparer(IComparerProvider provider, ComparisonRules comparisonRules)
            : base(provider, comparisonRules)
        {
            valueToIndex = new Dictionary <TEnum, int>();
            Array originalValues = Enum.GetValues(typeof(TEnum));
            int   valueCount     = originalValues.Length;

            if (valueCount < 1)
            {
                valueCount = 1;
                values     = new TEnum[] { default(TEnum) };
                valueToIndex.Add(values[0], 0);
            }
            else
            {
                TEnum[] allValues = new TEnum[valueCount];
                for (int i = 0; i < valueCount; i++)
                {
                    allValues[i] = (TEnum)originalValues.GetValue(i);
                }
                Array.Sort <TEnum>(allValues, (x, y) => BaseComparer.Compare(enumToSystem(x), enumToSystem(y)));
                for (int i = 0; i < valueCount - 1; i++)
                {
                    int j = i + 1;
                    if (BaseComparer.Equals(enumToSystem(allValues[i]), enumToSystem(allValues[j])))
                    {
                        valueCount--;
                        Array.Copy(allValues, j, allValues, i, valueCount - i);
                    }
                }
                values = new TEnum[valueCount];
                Array.Copy(allValues, values, valueCount);
                string[] names = Enum.GetNames(typeof(TEnum));
                for (int i = 0; i < names.Length; i++)
                {
                    TEnum current = (TEnum)originalValues.GetValue(i);
                    if (!valueToIndex.ContainsKey(current))
                    {
                        valueToIndex.Add(current, Array.IndexOf(values, current));
                    }
                }
            }
            maxIndex       = valueCount - 1;
            ValueRangeInfo = new ValueRangeInfo <TEnum>(
                true, values[0],
                true, values[valueCount - 1],
                false, default(TEnum));
        }
Пример #5
0
        private TEnum[] BuildValues(out int valueCount)
        {
            var originalValues = Enum.GetValues(typeof(TEnum));

            valueCount = originalValues.Length;
            if (valueCount < 1)
            {
                valueCount = 1;
                var values = new TEnum[] { default(TEnum) };
                valueToIndex.Add(values[0], 0);
                return(values);
            }
            else
            {
                var allValues = new TEnum[valueCount];
                for (var i = 0; i < valueCount; i++)
                {
                    allValues[i] = (TEnum)originalValues.GetValue(i);
                }

                Array.Sort <TEnum>(allValues, (x, y) => BaseComparer.Compare(EnumToSystem(x), EnumToSystem(y)));
                for (var i = 0; i < valueCount - 1; i++)
                {
                    var j = i + 1;
                    if (BaseComparer.Equals(EnumToSystem(allValues[i]), EnumToSystem(allValues[j])))
                    {
                        valueCount--;
                        Array.Copy(allValues, j, allValues, i, valueCount - i);
                    }
                }
                var values = new TEnum[valueCount];
                Array.Copy(allValues, values, valueCount);
                var names = Enum.GetNames(typeof(TEnum));
                for (var i = 0; i < names.Length; i++)
                {
                    var current = (TEnum)originalValues.GetValue(i);
                    if (!valueToIndex.ContainsKey(current))
                    {
                        valueToIndex.Add(current, Array.IndexOf(values, current));
                    }
                }
                return(values);
            }
        }
Пример #6
0
 public override bool Equals(T x, T y) => BaseComparer.Equals(x, y);
 public override bool Equals(T x, T y)
 {
     return(BaseComparer.Equals(x, y));
 }
Пример #8
0
 public override bool Equals(TEnum x, TEnum y)
 {
     return(BaseComparer.Equals(enumToSystem(x), enumToSystem(y)));
 }
Пример #9
0
 public override bool Equals(Pair <T> x, Pair <T> y)
 => BaseComparer.Equals(x.First, y.First) && BaseComparer.Equals(x.Second, y.Second);
Пример #10
0
 public override bool Equals(Wrapper1 <T> x, Wrapper1 <T> y)
 {
     return(BaseComparer.Equals(x.Value, y.Value));
 }
Пример #11
0
 public override bool Equals(TEnum x, TEnum y) => BaseComparer.Equals(EnumToSystem(x), EnumToSystem(y));