Пример #1
0
 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);
        }
Пример #3
0
        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");
 }