/// <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); }
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))); }
/// <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); }
private static int CalculateHashCode(ClassContext classContext) { return(classContext.Type.GetHashCode() ^ EqualityUtility.GetXorHashCode(classContext.Mixins) ^ EqualityUtility.GetXorHashCode(classContext.ComposedInterfaces)); }
private static int CalculateHashCode(IEnumerable <T> items) { return(EqualityUtility.GetXorHashCode(items)); }