Exemple #1
0
 private AdvancedComparer(IAdvancedComparer <T> a, IComparer <T> c, IEqualityComparer <T> e)
     : base(a)
 {
     ComparerImplementation         = c;
     EqualityComparerImplementation = e;
     // Below code is the same between both primary constructors
     if (Implementation != null)
     {
         Provider        = Implementation.Provider;
         ComparisonRules = Implementation.ComparisonRules;
         ValueTypeComparerBase <T> vtc = Implementation as ValueTypeComparerBase <T>;
         SystemComparer <T>        sc  = Implementation as SystemComparer <T>;
         // Trying to get faster delegates
         if (sc != null)
         {
             if (ComparisonRules.Value.Direction == Direction.Positive)
             {
                 Compare = SystemComparerStruct <T> .Instance.Compare;
             }
             Equals      = SystemComparerStruct <T> .Instance.Equals;
             GetHashCode = SystemComparerStruct <T> .Instance.GetHashCode;
         }
         else if (vtc != null)
         {
             if (ComparisonRules.Value.Direction == Direction.Positive && vtc.UsesDefaultCompare)
             {
                 Compare = SystemComparerStruct <T> .Instance.Compare;
             }
             if (vtc.UsesDefaultEquals)
             {
                 Equals = SystemComparerStruct <T> .Instance.Equals;
             }
             if (vtc.UsesDefaultGetHashCode)
             {
                 GetHashCode = SystemComparerStruct <T> .Instance.GetHashCode;
             }
         }
         // Setting interface comparers, if unassigned
         if (Compare == null)
         {
             Compare = ComparerImplementation.Compare;
         }
         if (Equals == null)
         {
             Equals = EqualityComparerImplementation.Equals;
         }
         if (GetHashCode == null)
         {
             GetHashCode = EqualityComparerImplementation.GetHashCode;
         }
         GetNearestValue = Implementation.GetNearestValue;
         ApplyRules      = Implementation.ApplyRules;
         ValueRangeInfo  = Implementation.ValueRangeInfo;
     }
     else
     {
         ComparisonRules = ComparisonRules.Positive;
         if (ComparerImplementation != null)
         {
             Compare = ComparerImplementation.Compare;
         }
         if (EqualityComparerImplementation != null)
         {
             Equals      = EqualityComparerImplementation.Equals;
             GetHashCode = EqualityComparerImplementation.GetHashCode;
         }
     }
 }
Exemple #2
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this type.
        /// </summary>
        /// <param name="implementation">Implementation to provide the delegates for.</param>
        public AdvancedComparer(IAdvancedComparer <T> implementation)
            : this(implementation, implementation, implementation)
        {
            ArgumentValidator.EnsureArgumentNotNull(implementation, "implementation");
        }