Exemple #1
0
 public static IILGen GenerateLoad(this IILGen ilGenerator, IFieldHandler fieldHandler, Type typeWanted, Action <IILGen> pushReaderOrCtx, ITypeConvertorGenerator typeConvertorGenerator)
 {
     fieldHandler.Load(ilGenerator,
                       fieldHandler.NeedsCtx() ? pushReaderOrCtx : PushReaderFromCtx(pushReaderOrCtx));
     typeConvertorGenerator.GenerateConversion(fieldHandler.HandledType(), typeWanted)(ilGenerator);
     return(ilGenerator);
 }
Exemple #2
0
        void IterateInlineDict(ref SpanReader reader, IFieldHandler keyHandler, IFieldHandler valueHandler, bool skipping, HashSet <int>?knownInlineRefs)
        {
            var skip  = skipping || _visitor != null && !_visitor.StartDictionary();
            var count = reader.ReadVUInt32();

            while (count-- > 0)
            {
                var skipKey = skip || _visitor != null && !_visitor.StartDictKey();
                IterateHandler(ref reader, keyHandler, skipKey, knownInlineRefs);
                if (!skipKey)
                {
                    _visitor?.EndDictKey();
                }
                var skipValue = skip || _visitor != null && !_visitor.StartDictValue();
                IterateHandler(ref reader, valueHandler, skipValue, knownInlineRefs);
                if (!skipValue)
                {
                    _visitor?.EndDictValue();
                }
            }
            if (!skip)
            {
                _visitor?.EndDictionary();
            }
        }
Exemple #3
0
        public virtual IFieldHandler CreateFromName(string handlerName, byte[] configuration, FieldHandlerOptions options)
        {
            IFieldHandler fallbackFieldHandler = null;

            foreach (var fieldHandler in BasicSerializersFactory.FieldHandlers)
            {
                if (fieldHandler.Name == handlerName)
                {
                    fallbackFieldHandler = fieldHandler;
                    if (fieldHandler.IsCompatibleWith(fieldHandler.HandledType(), options))
                    {
                        return(fieldHandler);
                    }
                }
            }
            if (fallbackFieldHandler != null)
            {
                return(fallbackFieldHandler);
            }
            if (handlerName == EnumFieldHandler.HandlerName)
            {
                return(new EnumFieldHandler(configuration));
            }
            if (handlerName == ListFieldHandler.HandlerName)
            {
                return(new ListFieldHandler(_provider.FieldHandlerFactory, _provider.TypeConvertorGenerator, configuration));
            }
            if (handlerName == DictionaryFieldHandler.HandlerName)
            {
                return(new DictionaryFieldHandler(_provider.FieldHandlerFactory, _provider.TypeConvertorGenerator, configuration));
            }
            return(null);
        }
Exemple #4
0
        void IterateInlineDict(AbstractBufferedReader reader, IFieldHandler keyHandler, IFieldHandler valueHandler, bool skipping)
        {
            var skip  = skipping || _visitor != null && !_visitor.StartDictionary();
            var count = reader.ReadVUInt32();

            while (count-- > 0)
            {
                var skipKey = skip || _visitor != null && !_visitor.StartDictKey();
                IterateHandler(reader, keyHandler, skipKey, null);
                if (!skipKey)
                {
                    _visitor?.EndDictKey();
                }
                var skipValue = skip || _visitor != null && !_visitor.StartDictValue();
                IterateHandler(reader, valueHandler, skipValue, null);
                if (!skipValue)
                {
                    _visitor?.EndDictValue();
                }
            }
            if (!skip)
            {
                _visitor?.EndDictionary();
            }
        }
Exemple #5
0
        public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
        {
            if (_type == type)
            {
                return(this);
            }
            if (!IsCompatibleWith(type))
            {
                Debug.Fail("strange");
                return(this);
            }
            var wantedItemType    = type.GetGenericArguments()[0];
            var wantedItemHandler = default(IFieldHandler);
            var listFieldHandler  = typeHandler as ListFieldHandler;

            if (listFieldHandler != null)
            {
                wantedItemHandler = listFieldHandler._itemsHandler;
            }
            var itemSpecialized = _itemsHandler.SpecializeLoadForType(wantedItemType, wantedItemHandler);

            if (itemSpecialized == wantedItemHandler)
            {
                return(typeHandler);
            }
            if (_typeConvertorGenerator.GenerateConversion(itemSpecialized.HandledType(), wantedItemType) == null)
            {
                Debug.Fail("even more strange");
                return(this);
            }
            return(new ListFieldHandler(_fieldHandlerFactory, _typeConvertorGenerator, type, itemSpecialized));
        }
Exemple #6
0
 ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler itemSpecialized)
 {
     _fieldHandlerFactory    = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _type         = type;
     _itemsHandler = itemSpecialized;
 }
Exemple #7
0
        public PropertyInf(AbstractBufferedReader reader, IFieldHandlerFactory fieldHandlerFactory)
        {
            _name = reader.ReadString();
            var resultFieldHandlerName = reader.ReadString();

            _fieldHandler = fieldHandlerFactory.CreateFromName(resultFieldHandlerName, reader.ReadByteArray(), FieldHandlerOptions.None);
        }
Exemple #8
0
 public static IILGen GenerateSkip(this IILGen ilGenerator, IFieldHandler fieldHandler,
                                   Action <IILGen> pushReaderOrCtx)
 {
     fieldHandler.Skip(ilGenerator,
                       fieldHandler.NeedsCtx() ? pushReaderOrCtx : PushReaderFromCtx(pushReaderOrCtx));
     return(ilGenerator);
 }
Exemple #9
0
        public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
        {
            if (typeHandler == this)
            {
                return(this);
            }
            var enumTypeHandler = typeHandler as EnumFieldHandler;

            if (enumTypeHandler != null && _signed == enumTypeHandler._signed)
            {
                if (type.GetCustomAttributes(typeof(BinaryCompatibilityOnlyAttribute), false).Length != 0)
                {
                    if (new EnumConfiguration(Configuration).IsBinaryRepresentationSubsetOf(new EnumConfiguration(enumTypeHandler.Configuration)))
                    {
                        return(typeHandler);
                    }
                }
                else
                {
                    if (new EnumConfiguration(Configuration).IsSubsetOf(new EnumConfiguration(enumTypeHandler.Configuration)))
                    {
                        return(typeHandler);
                    }
                }
            }
            if (_enumType == null && type.IsEnum)
            {
                if (_configuration.SequenceEqual(new EnumConfiguration(type).ToConfiguration()))
                {
                    _enumType = type;
                }
            }
            return(this);
        }
 public ODBDictionaryConfiguration(IObjectDB odb, IFieldHandler keyHandler, IFieldHandler valueHandler, bool preferInline)
 {
     _odb = odb;
     _keyHandler = keyHandler;
     _valueHandler = valueHandler;
     _preferInline = preferInline;
 }
 ODBDictionaryConfiguration(IFieldHandler keyHandler, Type keyType, IFieldHandler?valueHandler, Type?valueType)
 {
     KeyHandler   = keyHandler;
     KeyType      = keyType;
     ValueHandler = valueHandler;
     ValueType    = valueType;
 }
Exemple #12
0
 ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler itemSpecialized)
 {
     _fieldHandlerFactory = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _type = type;
     _itemsHandler = itemSpecialized;
 }
Exemple #13
0
 public static IILGen GenerateFreeContent(this IILGen ilGenerator, IFieldHandler fieldHandler, Action <IILGen> pushReaderOrCtx,
                                          ref NeedsFreeContent needsFreeContent)
 {
     UpdateNeedsFreeContent(fieldHandler.FreeContent(ilGenerator,
                                                     fieldHandler.NeedsCtx() ? pushReaderOrCtx : PushReaderFromCtx(pushReaderOrCtx)), ref needsFreeContent);
     return(ilGenerator);
 }
Exemple #14
0
 public ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, byte[] configuration)
 {
     _fieldHandlerFactory = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _configuration = configuration;
     var reader = new ByteArrayReader(configuration);
     _itemsHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
 }
Exemple #15
0
 public static IILGen GenerateFreeContent(this IILGen ilGenerator, IFieldHandler fieldHandler, Action <IILGen> pushReaderOrCtx, ref bool needsFreeContent)
 {
     if (fieldHandler.FreeContent(ilGenerator, fieldHandler.NeedsCtx() ? pushReaderOrCtx : PushReaderFromCtx(pushReaderOrCtx)))
     {
         needsFreeContent = true;
     }
     return(ilGenerator);
 }
Exemple #16
0
 ODBSetFieldHandler(IObjectDB odb, byte[] configuration, IFieldHandler specializedKeyHandler)
 {
     _odb = odb;
     _typeConvertGenerator = odb.TypeConvertorGenerator;
     _configuration        = configuration;
     _keysHandler          = specializedKeyHandler;
     CreateConfiguration();
 }
Exemple #17
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (HandledType() == type || !IsCompatibleWith(type, FieldHandlerOptions.None))
     {
         return(this);
     }
     return(new ConvertingHandler(this, type));
 }
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (typeof(ByteBuffer) == type)
     {
         return(new ByteBufferHandler(this));
     }
     return(this);
 }
Exemple #19
0
 DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler keySpecialized, IFieldHandler valueSpecialized)
 {
     _fieldHandlerFactory    = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _type          = type;
     _keysHandler   = keySpecialized;
     _valuesHandler = valueSpecialized;
 }
Exemple #20
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (typeof (ByteBuffer) == type)
     {
         return new ByteBufferHandler(this);
     }
     return this;
 }
 DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler keySpecialized, IFieldHandler valueSpecialized)
 {
     _fieldHandlerFactory = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _type = type;
     _keysHandler = keySpecialized;
     _valuesHandler = valueSpecialized;
 }
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (HandledType() == type || !IsCompatibleWith(type, FieldHandlerOptions.None))
     {
         return this;
     }
     return new ConvertingHandler(this, type);
 }
Exemple #23
0
 DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertGenerator, Type type, IFieldHandler keySpecialized, IFieldHandler valueSpecialized)
 {
     _fieldHandlerFactory  = fieldHandlerFactory;
     _typeConvertGenerator = typeConvertGenerator;
     _type          = type;
     _keysHandler   = keySpecialized;
     _valuesHandler = valueSpecialized;
     Configuration  = Array.Empty <byte>();
 }
Exemple #24
0
        public NullableFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, byte[] configuration)
        {
            _fieldHandlerFactory    = fieldHandlerFactory;
            _typeConvertorGenerator = typeConvertorGenerator;
            Configuration           = configuration;
            var reader = new SpanReader(configuration);

            _itemHandler = _fieldHandlerFactory.CreateFromReader(ref reader, FieldHandlerOptions.None);
        }
Exemple #25
0
        public ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, byte[] configuration)
        {
            _fieldHandlerFactory    = fieldHandlerFactory;
            _typeConvertorGenerator = typeConvertorGenerator;
            _configuration          = configuration;
            var reader = new ByteArrayReader(configuration);

            _itemsHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
        }
Exemple #26
0
 ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertGenerator, Type type, IFieldHandler itemSpecialized)
 {
     _fieldHandlerFactory  = fieldHandlerFactory;
     _typeConvertGenerator = typeConvertGenerator;
     _type         = type;
     _isSet        = type.InheritsOrImplements(typeof(ISet <>));
     _itemsHandler = itemSpecialized;
     Configuration = Array.Empty <byte>();
 }
Exemple #27
0
        public DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertGenerator, byte[] configuration)
        {
            _fieldHandlerFactory  = fieldHandlerFactory;
            _typeConvertGenerator = typeConvertGenerator;
            Configuration         = configuration;
            var reader = new ByteArrayReader(configuration);

            _keysHandler   = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
            _valuesHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
        }
Exemple #28
0
        public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
        {
            var needType = Unwrap(type);

            if (needType.IsInterface || needType.IsAbstract || type != needType && needType == HandledType())
            {
                return(new DBObjectFieldHandler(_objectDb, needType, needType != type));
            }
            return(this);
        }
 ODBDictionaryFieldHandler(IObjectDB odb, byte[] configuration, int configurationId, IFieldHandler specializedKeyHandler, IFieldHandler specializedValueHandler)
 {
     _odb = odb;
     _fieldHandlerFactory    = odb.FieldHandlerFactory;
     _typeConvertorGenerator = odb.TypeConvertorGenerator;
     _configuration          = configuration;
     _keysHandler            = specializedKeyHandler;
     _valuesHandler          = specializedValueHandler;
     CreateConfiguration();
 }
 ODBDictionaryFieldHandler(IObjectDB odb, byte[] configuration, int configurationId, IFieldHandler specializedKeyHandler, IFieldHandler specializedValueHandler)
 {
     _odb = odb;
     _fieldHandlerFactory = odb.FieldHandlerFactory;
     _typeConvertorGenerator = odb.TypeConvertorGenerator;
     _configuration = configuration;
     _keysHandler = specializedKeyHandler;
     _valuesHandler = specializedValueHandler;
     CreateConfiguration();
 }
Exemple #31
0
 public ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type)
 {
     _fieldHandlerFactory = fieldHandlerFactory;
     _typeConvertorGenerator = typeConvertorGenerator;
     _type = type;
     _itemsHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.None);
     var writer = new ByteBufferWriter();
     writer.WriteFieldHandler(_itemsHandler);
     _configuration = writer.Data.ToByteArray();
 }
Exemple #32
0
        public ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type)
        {
            _fieldHandlerFactory    = fieldHandlerFactory;
            _typeConvertorGenerator = typeConvertorGenerator;
            _type         = type;
            _itemsHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.None);
            var writer = new ByteBufferWriter();

            writer.WriteFieldHandler(_itemsHandler);
            _configuration = writer.Data.ToByteArray();
        }
 public ODBDictionaryFieldHandler(IObjectDB odb, byte[] configuration)
 {
     _odb = odb;
     _fieldHandlerFactory = odb.FieldHandlerFactory;
     _typeConvertorGenerator = odb.TypeConvertorGenerator;
     _configuration = configuration;
     var reader = new ByteArrayReader(configuration);
     _keysHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.Orderable | FieldHandlerOptions.AtEndOfStream);
     _valuesHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
     CreateConfiguration();
 }
Exemple #34
0
        public ODBSetFieldHandler(IObjectDB odb, Type type, IFieldHandlerFactory fieldHandlerFactory)
        {
            _odb = odb;
            _typeConvertGenerator = odb.TypeConvertorGenerator;
            _type        = type;
            _keysHandler = fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.Orderable | FieldHandlerOptions.AtEndOfStream);
            var writer = new ByteBufferWriter();

            writer.WriteFieldHandler(_keysHandler);
            _configuration = writer.Data.ToByteArray();
            CreateConfiguration();
        }
 object CreateWriter(IFieldHandler fieldHandler, Type realType)
 {
     //Action<T, AbstractBufferedWriter, IWriterCtx>
     var delegateType = typeof(Action<,,>).MakeGenericType(realType, typeof(AbstractBufferedWriter), typeof(IWriterCtx));
     var dm = ILBuilder.Instance.NewMethod(fieldHandler.Name + "Writer", delegateType);
     var ilGenerator = dm.Generator;
     Action<IILGen> pushWriterOrCtx = il => il.Ldarg((ushort)(1 + (fieldHandler.NeedsCtx() ? 1 : 0)));
     fieldHandler.Save(ilGenerator, pushWriterOrCtx,
         il => il.Ldarg(0).Do(_typeConvertorGenerator.GenerateConversion(realType, fieldHandler.HandledType())));
     ilGenerator.Ret();
     return dm.Create();
 }
        object CreateWriter(IFieldHandler fieldHandler, Type realType)
        {
            //Action<T, ref SpanWriter, IWriterCtx>
            var delegateType = typeof(WriterFun <>).MakeGenericType(realType);
            var dm           = ILBuilder.Instance.NewMethod(fieldHandler.Name + "Writer", delegateType);
            var ilGenerator  = dm.Generator;

            fieldHandler.Save(ilGenerator, il => il.Ldarg(1), il => il.Ldarg(2),
                              il => il.Ldarg(0).Do(_typeConvertGenerator.GenerateConversion(realType, fieldHandler.HandledType()) !));
            ilGenerator.Ret();
            return(dm.Create());
        }
        public ODBDictionaryFieldHandler(IObjectDB odb, byte[] configuration)
        {
            _odb = odb;
            _fieldHandlerFactory    = odb.FieldHandlerFactory;
            _typeConvertorGenerator = odb.TypeConvertorGenerator;
            _configuration          = configuration;
            var reader = new ByteArrayReader(configuration);

            _keysHandler   = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.Orderable | FieldHandlerOptions.AtEndOfStream);
            _valuesHandler = _fieldHandlerFactory.CreateFromReader(reader, FieldHandlerOptions.None);
            CreateConfiguration();
        }
Exemple #38
0
        public ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertGenerator, Type type)
        {
            _fieldHandlerFactory  = fieldHandlerFactory;
            _typeConvertGenerator = typeConvertGenerator;
            _type         = type;
            _isSet        = type.InheritsOrImplements(typeof(ISet <>));
            _itemsHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.None);
            var writer = new SpanWriter();

            writer.WriteFieldHandler(_itemsHandler);
            Configuration = writer.GetSpan().ToArray();
        }
Exemple #39
0
        void IterateSet(ulong dictId, IFieldHandler keyHandler)
        {
            if (_visitor != null && !_visitor.StartSet())
            {
                return;
            }
            var o      = ObjectDB.AllDictionariesPrefix.Length;
            var prefix = new byte[o + PackUnpack.LengthVUInt(dictId)];

            Array.Copy(ObjectDB.AllDictionariesPrefix, prefix, o);
            PackUnpack.PackVUInt(prefix, ref o, dictId);
            long prevProtectionCounter = 0;
            long pos = 0;

            while (true)
            {
                if (pos == 0)
                {
                    if (!_trkv.FindFirstKey(prefix))
                    {
                        break;
                    }
                }
                else
                {
                    if (_trkv.CursorMovedCounter != prevProtectionCounter)
                    {
                        if (!_trkv.SetKeyIndex(prefix, pos))
                        {
                            break;
                        }
                    }
                    else
                    {
                        if (!_trkv.FindNextKey(prefix))
                        {
                            break;
                        }
                    }
                }
                _fastVisitor.MarkCurrentKeyAsUsed(_trkv);
                prevProtectionCounter = _trkv.CursorMovedCounter;
                if (_visitor == null || _visitor.StartSetKey())
                {
                    var keyReader = new SpanReader(_trkv.GetKey().Slice(prefix.Length));
                    IterateHandler(ref keyReader, keyHandler, false, null);
                    _visitor?.EndSetKey();
                }
                pos++;
            }
            _visitor?.EndSet();
        }
        object CreateWriter(IFieldHandler fieldHandler, Type realType)
        {
            //Action<T, AbstractBufferedWriter, IWriterCtx>
            var             delegateType    = typeof(Action <, ,>).MakeGenericType(realType, typeof(AbstractBufferedWriter), typeof(IWriterCtx));
            var             dm              = ILBuilder.Instance.NewMethod(fieldHandler.Name + "Writer", delegateType);
            var             ilGenerator     = dm.Generator;
            Action <IILGen> pushWriterOrCtx = il => il.Ldarg((ushort)(1 + (fieldHandler.NeedsCtx() ? 1 : 0)));

            fieldHandler.Save(ilGenerator, pushWriterOrCtx,
                              il => il.Ldarg(0).Do(_typeConvertorGenerator.GenerateConversion(realType, fieldHandler.HandledType())));
            ilGenerator.Ret();
            return(dm.Create());
        }
 public ODBDictionaryFieldHandler(IObjectDB odb, Type type)
 {
     _odb = odb;
     _fieldHandlerFactory = odb.FieldHandlerFactory;
     _typeConvertorGenerator = odb.TypeConvertorGenerator;
     _type = type;
     _keysHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.Orderable | FieldHandlerOptions.AtEndOfStream);
     _valuesHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[1], FieldHandlerOptions.None);
     var writer = new ByteBufferWriter();
     writer.WriteFieldHandler(_keysHandler);
     writer.WriteFieldHandler(_valuesHandler);
     _configuration = writer.Data.ToByteArray();
     CreateConfiguration();
 }
 object CreateReader(IFieldHandler fieldHandler, Type realType)
 {
     //Func<AbstractBufferedReader, IReaderCtx, T>
     var delegateType = typeof(Func<,,>).MakeGenericType(typeof(AbstractBufferedReader), typeof(IReaderCtx),
                                                          realType);
     var dm = ILBuilder.Instance.NewMethod(fieldHandler.Name + "Reader", delegateType);
     var ilGenerator = dm.Generator;
     Action<IILGen> pushReaderOrCtx = il => il.Ldarg((ushort)(fieldHandler.NeedsCtx() ? 1 : 0));
     fieldHandler.Load(ilGenerator, pushReaderOrCtx);
     ilGenerator
         .Do(_typeConvertorGenerator.GenerateConversion(fieldHandler.HandledType(), realType))
         .Ret();
     return dm.Create();
 }
Exemple #43
0
 public MethodInf(AbstractBufferedReader reader, IFieldHandlerFactory fieldHandlerFactory)
 {
     _name = reader.ReadString();
     _ifaceName = reader.ReadString();
     var resultFieldHandlerName = reader.ReadString();
     if (resultFieldHandlerName != null)
     {
         _resultFieldHandler = fieldHandlerFactory.CreateFromName(resultFieldHandlerName, reader.ReadByteArray(), FieldHandlerOptions.None);
     }
     var parameterCount = reader.ReadVUInt32();
     _parameters = new ParameterInf[parameterCount];
     for (int i = 0; i < _parameters.Length; i++)
     {
         _parameters[i] = new ParameterInf(reader, fieldHandlerFactory);
     }
 }
Exemple #44
0
 public MethodInf(MethodInfo method, IFieldHandlerFactory fieldHandlerFactory)
 {
     MethodInfo = method;
     _name = method.Name;
     foreach (var itf in GetInterfacesForMethod(method.DeclaringType, method.GetBaseDefinition()))
     {
         _ifaceName = itf.Name;
         break;
     }
     var syncReturnType = method.ReturnType.UnwrapTask();
     if (syncReturnType != typeof(void))
         _resultFieldHandler = fieldHandlerFactory.CreateFromType(syncReturnType, FieldHandlerOptions.None);
     var parameterInfos = method.GetParameters();
     _parameters = new ParameterInf[parameterInfos.Length];
     for (int i = 0; i < parameterInfos.Length; i++)
     {
         _parameters[i] = new ParameterInf(parameterInfos[i], fieldHandlerFactory);
     }
 }
Exemple #45
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (_type == type) return this;
     if (!IsCompatibleWith(type))
     {
         Debug.Fail("strange");
         return this;
     }
     var wantedItemType = type.GetGenericArguments()[0];
     var wantedItemHandler = default(IFieldHandler);
     var listFieldHandler = typeHandler as ListFieldHandler;
     if (listFieldHandler != null)
     {
         wantedItemHandler = listFieldHandler._itemsHandler;
     }
     var itemSpecialized = _itemsHandler.SpecializeLoadForType(wantedItemType, wantedItemHandler);
     if (itemSpecialized == wantedItemHandler)
     {
         return typeHandler;
     }
     if (_typeConvertorGenerator.GenerateConversion(itemSpecialized.HandledType(), wantedItemType) == null)
     {
         Debug.Fail("even more strange");
         return this;
     }
     return new ListFieldHandler(_fieldHandlerFactory, _typeConvertorGenerator, type, itemSpecialized);
 }
Exemple #46
0
 public ParameterInf(AbstractBufferedReader reader, IFieldHandlerFactory fieldHandlerFactory)
 {
     _name = reader.ReadString();
     var handlerName = reader.ReadString();
     _fieldHandler = fieldHandlerFactory.CreateFromName(handlerName, reader.ReadByteArray(), FieldHandlerOptions.None);
 }
Exemple #47
0
 TableFieldInfo(string name, IFieldHandler handler)
 {
     _name = name;
     _handler = handler;
 }
 public ODBDictionaryConfiguration(IObjectDB odb, IFieldHandler keyHandler, IFieldHandler valueHandler)
 {
     _odb = odb;
     _keyHandler = keyHandler;
     _valueHandler = valueHandler;
 }
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     throw new InvalidOperationException();
 }
 public ConvertingHandler(IFieldHandler fieldHandler, Type type)
 {
     _fieldHandler = fieldHandler;
     _type = type;
 }
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (_type != type)
         GenerateType(type);
     if (_type == type) return this;
     if (!IsCompatibleWithCore(type)) return this;
     var arguments = type.GetGenericArguments();
     var wantedKeyHandler = default(IFieldHandler);
     var wantedValueHandler = default(IFieldHandler);
     var dictTypeHandler = typeHandler as ODBDictionaryFieldHandler;
     if (dictTypeHandler != null)
     {
         wantedKeyHandler = dictTypeHandler._keysHandler;
         wantedValueHandler = dictTypeHandler._valuesHandler;
     }
     var specializedKeyHandler = _keysHandler.SpecializeLoadForType(arguments[0], wantedKeyHandler);
     var specializedValueHandler = _valuesHandler.SpecializeLoadForType(arguments[1], wantedValueHandler);
     if (wantedKeyHandler == specializedKeyHandler && (wantedValueHandler == specializedValueHandler || wantedValueHandler.HandledType()==specializedValueHandler.HandledType()))
     {
         return typeHandler;
     }
     return new ODBDictionaryFieldHandler(_odb, _configuration, _configurationId, specializedKeyHandler, specializedValueHandler);
 }
Exemple #52
0
 public PropertyInf(PropertyInfo property, IFieldHandlerFactory fieldHandlerFactory)
 {
     _name = property.Name;
     _fieldHandler= fieldHandlerFactory.CreateFromType(property.PropertyType, FieldHandlerOptions.None);
 }
Exemple #53
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (this == typeHandler) return this;
     var myType = HandledType();
     if (type != myType && Unwrap(type) == myType && typeHandler.HandledType() == type)
         return typeHandler;
     return this;
 }
Exemple #54
0
 public ParameterInf(ParameterInfo parameter, IFieldHandlerFactory fieldHandlerFactory)
 {
     _name = parameter.Name;
     _fieldHandler = fieldHandlerFactory.CreateFromType(parameter.ParameterType, FieldHandlerOptions.None);
 }
Exemple #55
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (typeHandler == this) return this;
     var enumTypeHandler = typeHandler as EnumFieldHandler;
     if (enumTypeHandler != null)
     {
         if (_signed == enumTypeHandler._signed && new EnumConfiguration(Configuration).IsSubsetOf(new EnumConfiguration(enumTypeHandler.Configuration)))
         {
             return typeHandler;
         }
     }
     if (_enumType == null && type.IsEnum)
     {
         if (_configuration.SequenceEqual(new EnumConfiguration(type).ToConfiguration()))
         {
             _enumType = type;
         }
     }
     return this;
 }
Exemple #56
0
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     return this;
 }
 public IFieldHandler SpecializeLoadForType(Type type, IFieldHandler typeHandler)
 {
     if (_type == type) return this;
     if (!IsCompatibleWith(type))
     {
         Debug.Fail("strange");
         return this;
     }
     var wantedKeyType = type.GetGenericArguments()[0];
     var wantedValueType = type.GetGenericArguments()[1];
     var wantedKeyHandler = default(IFieldHandler);
     var wantedValueHandler = default(IFieldHandler);
     var dictTypeHandler = typeHandler as DictionaryFieldHandler;
     if (dictTypeHandler != null)
     {
         wantedKeyHandler = dictTypeHandler._keysHandler;
         wantedValueHandler = dictTypeHandler._valuesHandler;
     }
     var keySpecialized = _keysHandler.SpecializeLoadForType(wantedKeyType, wantedKeyHandler);
     if (_typeConvertorGenerator.GenerateConversion(keySpecialized.HandledType(), wantedKeyType) == null)
     {
         Debug.Fail("even more strange key");
         return this;
     }
     var valueSpecialized = _valuesHandler.SpecializeLoadForType(wantedValueType, wantedValueHandler);
     if (_typeConvertorGenerator.GenerateConversion(valueSpecialized.HandledType(), wantedValueType) == null)
     {
         Debug.Fail("even more strange value");
         return this;
     }
     if (wantedKeyHandler == keySpecialized && wantedValueHandler == valueSpecialized)
     {
         return typeHandler;
     }
     return new DictionaryFieldHandler(_fieldHandlerFactory, _typeConvertorGenerator, type, keySpecialized, valueSpecialized);
 }