private ArrayHasher(HasherResolver resolver, IConfigurationProvider configuration, IVariable variable) { _variable = variable; _arrayHashEmitter = new ArrayHashEmitter(resolver, variable); _configuration = configuration.Get(variable.OwnerType); _hasCustomComparer = configuration.HasCustomComparer(variable.VariableType.GetElementType()); }
public static NullableHasher Create(HasherResolver resolver, IVariable variable) { if (variable.VariableType.IsNullable()) { return(new NullableHasher(resolver, variable)); } return(null); }
public static ArrayHasher Create(HasherResolver resolver, IConfigurationProvider configuration, IVariable variable) { var variableType = variable.VariableType; if (variableType.IsArray && variableType.GetArrayRank() == 1) { return(new ArrayHasher(resolver, configuration, variable)); } return(null); }
public static EnumerablesHasher Create(HasherResolver resolver, IConfigurationProvider configuration, IVariable variable) { var variableType = variable.VariableType; if (variableType.ImplementsGenericInterface(typeof(IEnumerable <>)) && !variableType.IsArray) { return(new EnumerablesHasher(resolver, configuration, variable)); } return(null); }
private MembersHasher( HasherResolver resolver, MembersProvider membersProvider, IConfigurationProvider configuration, IVariable variable) { _variable = variable; _resolver = resolver; _membersProvider = membersProvider; _configuration = configuration; }
public static MembersHasher Create( HasherResolver resolver, MembersProvider membersProvider, IConfigurationProvider configuration, IVariable variable) { if (variable.VariableType == typeof(object) || !variable.VariableType.IsHierarchical() || !(variable is ArgumentVariable)) { return(null); } return(new MembersHasher(resolver, membersProvider, configuration, variable)); }
private EnumerablesHasher(HasherResolver resolver, IConfigurationProvider configuration, IVariable variable) { _resolver = resolver; _configuration = configuration; _variable = variable; var variableType = variable.VariableType; _elementType = variableType .FindGenericInterface(typeof(IEnumerable <>)) .GetGenericArguments() .Single(); _getEnumeratorMethod = variableType.FindMethod(nameof(IEnumerable.GetEnumerator), Type.EmptyTypes); _enumeratorType = _getEnumeratorMethod.ReturnType; _moveNextMethod = _enumeratorType.FindMethod(nameof(IEnumerator.MoveNext), Type.EmptyTypes); _getCurrentMethod = _enumeratorType.GetPropertyGetter(nameof(IEnumerator.Current)); _arrayHashEmitter = new ArrayHashEmitter(resolver, variable); }
public ArrayHashEmitter(HasherResolver resolver, IVariable variable) { _resolver = resolver; _variable = variable; }
private NullableHasher(HasherResolver resolver, IVariable variable) { _resolver = resolver; _variable = variable; _hasValueMethod = _variable.VariableType.GetPropertyGetter("HasValue"); }