/// <summary>
        /// Initializes a new instance of the <see cref="ConcreteMixinTypeIdentifier"/> class.
        /// </summary>
        /// <param name="mixinType">The mixin type for which a concrete type was generated.</param>
        /// <param name="overriders">Mixin methods that override methods of the target class.</param>
        /// <param name="overridden">Mixin methods that are overridden by the target class.</param>
        public ConcreteMixinTypeIdentifier(Type mixinType, HashSet <MethodInfo> overriders, HashSet <MethodInfo> overridden)
        {
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("overriders", overriders);
            ArgumentUtility.CheckNotNull("overridden", overridden);

            _mixinType  = mixinType;
            _overriders = overriders;
            _overridden = overridden;

            _cachedHashCode = MixinType.GetHashCode()
                              ^ EqualityUtility.GetXorHashCode(_overriders)
                              ^ EqualityUtility.GetXorHashCode(_overridden);
        }
Ejemplo n.º 2
0
        public void GetXorHashCode()
        {
            IEnumerable objects1 = new int[] { 1, 2, 3 };
            IEnumerable objects2 = new int[] { 1, 2, 3 };

            Assert.That(EqualityUtility.GetXorHashCode(objects2), Is.EqualTo(EqualityUtility.GetXorHashCode(objects1)));

            IEnumerable objects3 = new int[] { 3, 2, 1 };

            Assert.That(EqualityUtility.GetXorHashCode(objects3), Is.EqualTo(EqualityUtility.GetXorHashCode(objects1)));

            IEnumerable objects4 = new int[] { 1, 2, 17 };

            Assert.That(EqualityUtility.GetXorHashCode(objects4), Is.Not.EqualTo(EqualityUtility.GetXorHashCode(objects1)));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MixinContext"/> class.
        /// </summary>
        /// <param name="mixinKind">The kind of relationship the configured mixin has with its target class.</param>
        /// <param name="mixinType">The mixin type represented by this <see cref="MixinContext"/>.</param>
        /// <param name="introducedMemberVisibility">The default visbility of introduced members.</param>
        /// <param name="explicitDependencies">The explicit dependencies of the mixin.</param>
        /// <param name="origin">
        /// A description of where the <see cref="MixinContext"/> originates from. Note that <paramref name="origin"/> is not considered when comparing
        /// <see cref="MixinContext"/> objects for equality.
        /// </param>
        public MixinContext(
            MixinKind mixinKind,
            Type mixinType,
            MemberVisibility introducedMemberVisibility,
            IEnumerable <Type> explicitDependencies,
            MixinContextOrigin origin)
        {
            ArgumentUtility.CheckNotNull("mixinType", mixinType);
            ArgumentUtility.CheckNotNull("explicitDependencies", explicitDependencies);
            ArgumentUtility.CheckNotNull("origin", origin);

            _mixinType = mixinType;
            _mixinKind = mixinKind;
            _introducedMemberVisibility = introducedMemberVisibility;
            _explicitDependencies       = new HashSet <Type> (explicitDependencies).AsReadOnly();
            _origin = origin;

            _cachedHashCode = EqualityUtility.GetRotatedHashCode(
                _mixinKind,
                _mixinType,
                EqualityUtility.GetXorHashCode(ExplicitDependencies),
                IntroducedMemberVisibility);
        }
Ejemplo n.º 4
0
 private static int CalculateHashCode(ClassContext classContext)
 {
     return(classContext.Type.GetHashCode()
            ^ EqualityUtility.GetXorHashCode(classContext.Mixins)
            ^ EqualityUtility.GetXorHashCode(classContext.ComposedInterfaces));
 }
Ejemplo n.º 5
0
 private static int CalculateHashCode(IEnumerable <T> items)
 {
     return(EqualityUtility.GetXorHashCode(items));
 }