ListFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler itemSpecialized) { _fieldHandlerFactory = fieldHandlerFactory; _typeConvertorGenerator = typeConvertorGenerator; _type = type; _itemsHandler = itemSpecialized; }
public static void GenerateLoadEx(this ITypeDescriptor descriptor, IILGen ilGenerator, Action<IILGen> pushReader, Action<IILGen> pushCtx, Action<IILGen> pushDescriptor, Type asType, ITypeConvertorGenerator convertorGenerator) { if (descriptor.StoredInline) { if (descriptor.LoadNeedsHelpWithConversion && asType!=typeof(object)) { var origType = descriptor.GetPreferedType(); descriptor.GenerateLoad(ilGenerator, pushReader, pushCtx, pushDescriptor, origType); if (origType != asType) { var conv = convertorGenerator.GenerateConversion(origType, asType); if (conv == null) throw new BTDBException("Don't know how to convert " + descriptor.Name + " from " + origType.ToSimpleName() + " to " + asType.ToSimpleName()); conv(ilGenerator); } } else { descriptor.GenerateLoad(ilGenerator, pushReader, pushCtx, pushDescriptor, asType); } } else { ilGenerator .Do(pushCtx) .Callvirt(() => default(ITypeBinaryDeserializerContext).LoadObject()); if (asType != typeof(object)) ilGenerator.Castclass(asType); } }
public ListTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, Type type) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; _type = type; _itemType = GetItemType(type); }
public EventSerializer(ITypeNameMapper typeNameMapper = null, ITypeConvertorGenerator typeConvertorGenerator = null) { TypeNameMapper = typeNameMapper ?? new FullNameTypeMapper(); ConvertorGenerator = typeConvertorGenerator ?? new DefaultTypeConvertorGenerator(); _id2Info.Add(null); // 0 = null _id2Info.Add(null); // 1 = back reference foreach (var predefinedType in BasicSerializersFactory.TypeDescriptors) { var infoForType = new SerializerTypeInfo { Id = _id2Info.Count, Descriptor = predefinedType }; _typeOrDescriptor2Info[predefinedType] = infoForType; _id2Info.Add(infoForType); _typeOrDescriptor2Info[predefinedType.GetPreferedType()] = infoForType; var descriptorMultipleNativeTypes = predefinedType as ITypeDescriptorMultipleNativeTypes; if (descriptorMultipleNativeTypes == null) continue; foreach (var type in descriptorMultipleNativeTypes.GetNativeTypes()) { _typeOrDescriptor2Info[type] = infoForType; } } while (_id2Info.Count < ReservedBuildinTypes) _id2Info.Add(null); }
public EventDeserializer(ITypeNameMapper typeNameMapper = null, ITypeConvertorGenerator typeConvertorGenerator = null) { TypeNameMapper = typeNameMapper ?? new FullNameTypeMapper(); ConvertorGenerator = typeConvertorGenerator ?? new DefaultTypeConvertorGenerator(); _id2Info.Add(null); // 0 = null _id2Info.Add(null); // 1 = back reference foreach (var predefinedType in BasicSerializersFactory.TypeDescriptors) { var infoForType = new DeserializerTypeInfo { Id = _id2Info.Count, Descriptor = predefinedType }; _typeOrDescriptor2Info[predefinedType] = infoForType; _id2Info.Add(infoForType); _typeOrDescriptor2Info[predefinedType.GetPreferedType()] = infoForType; var descriptorMultipleNativeTypes = predefinedType as ITypeDescriptorMultipleNativeTypes; if (descriptorMultipleNativeTypes == null) { continue; } foreach (var type in descriptorMultipleNativeTypes.GetNativeTypes()) { _typeOrDescriptor2Info[type] = infoForType; } } while (_id2Info.Count < ReservedBuildinTypes) { _id2Info.Add(null); } }
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); }
DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type, IFieldHandler keySpecialized, IFieldHandler valueSpecialized) { _fieldHandlerFactory = fieldHandlerFactory; _typeConvertorGenerator = typeConvertorGenerator; _type = type; _keysHandler = keySpecialized; _valuesHandler = valueSpecialized; }
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); }
ODBSetFieldHandler(IObjectDB odb, byte[] configuration, IFieldHandler specializedKeyHandler) { _odb = odb; _typeConvertGenerator = odb.TypeConvertorGenerator; _configuration = configuration; _keysHandler = specializedKeyHandler; CreateConfiguration(); }
public DictionaryTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, Type type) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; _type = type; var genericArguments = type.GetGenericArguments(); _keyType = genericArguments[0]; _valueType = genericArguments[1]; }
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>(); }
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); }
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>(); }
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(); }
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 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); }
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(); }
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(); }
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(); }
public DictionaryFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertGenerator, Type type) { _fieldHandlerFactory = fieldHandlerFactory; _typeConvertGenerator = typeConvertGenerator; _type = type; _keysHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.None); _valuesHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[1], FieldHandlerOptions.None); var writer = new SpanWriter(); writer.WriteFieldHandler(_keysHandler); writer.WriteFieldHandler(_valuesHandler); Configuration = writer.GetSpan().ToArray(); }
public ODBSetFieldHandler(IObjectDB odb, byte[] configuration) { _odb = odb; var fieldHandlerFactory = odb.FieldHandlerFactory; _typeConvertGenerator = odb.TypeConvertorGenerator; _configuration = configuration; var reader = new SpanReader(configuration); _keysHandler = fieldHandlerFactory.CreateFromReader(ref reader, FieldHandlerOptions.Orderable | FieldHandlerOptions.AtEndOfStream); CreateConfiguration(); }
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(); }
public NullableFieldHandler(IFieldHandlerFactory fieldHandlerFactory, ITypeConvertorGenerator typeConvertorGenerator, Type type) { _fieldHandlerFactory = fieldHandlerFactory; _typeConvertorGenerator = typeConvertorGenerator; _type = type; _itemHandler = _fieldHandlerFactory.CreateFromType(type.GetGenericArguments()[0], FieldHandlerOptions.None); if (_itemHandler.NeedsCtx()) { throw new NotSupportedException("Nullable complex types are not supported."); } var writer = new SpanWriter(); writer.WriteFieldHandler(_itemHandler); Configuration = writer.GetSpan().ToArray(); }
public ODBDictionaryFieldHandler(IObjectDB odb, Type type, IFieldHandlerFactory fieldHandlerFactory) { _odb = odb; _typeConvertGenerator = 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 SpanWriter(); writer.WriteFieldHandler(_keysHandler); writer.WriteFieldHandler(_valuesHandler); _configuration = writer.GetSpan().ToArray(); CreateConfiguration(); }
public static void GenerateLoadEx(this ITypeDescriptor descriptor, IILGen ilGenerator, Action <IILGen> pushReader, Action <IILGen> pushCtx, Action <IILGen> pushDescriptor, Type asType, ITypeConvertorGenerator convertorGenerator) { if (descriptor.StoredInline) { if (descriptor.LoadNeedsHelpWithConversion && asType != typeof(object)) { var origType = descriptor.GetPreferredType(); descriptor.GenerateLoad(ilGenerator, pushReader, pushCtx, pushDescriptor, origType); if (origType != asType) { var conv = convertorGenerator.GenerateConversion(origType, asType); if (conv == null) { throw new BTDBException("Don't know how to convert " + descriptor.Name + " from " + origType.ToSimpleName() + " to " + asType.ToSimpleName()); } conv(ilGenerator); } } else { descriptor.GenerateLoad(ilGenerator, pushReader, pushCtx, pushDescriptor, asType); } } else { ilGenerator .Do(pushCtx) .Do(pushReader) .Callvirt(typeof(ITypeBinaryDeserializerContext).GetMethod(nameof(ITypeBinaryDeserializerContext.LoadObject)) !); if (asType != typeof(object)) { ilGenerator.Call(typeof(TypeDescriptorExtensions).GetMethod(nameof(IntelligentCast)) ! .MakeGenericMethod(asType)); } } }
public RelationInfo(uint id, string name, IRelationInfoResolver relationInfoResolver, Type interfaceType, Type clientType, IInternalObjectDBTransaction tr) { _id = id; _name = name; _relationInfoResolver = relationInfoResolver; _interfaceType = interfaceType; _clientType = clientType; ClientRelationVersionInfo = CreateVersionInfoByReflection(); LoadVersionInfos(tr.KeyValueDBTransaction); ApartFields = FindApartFields(interfaceType, ClientRelationVersionInfo); if (LastPersistedVersion > 0 && RelationVersionInfo.Equal(_relationVersions[LastPersistedVersion], ClientRelationVersionInfo)) { _relationVersions[LastPersistedVersion] = ClientRelationVersionInfo; ClientTypeVersion = LastPersistedVersion; } else { ClientTypeVersion = LastPersistedVersion + 1; _relationVersions.Add(ClientTypeVersion, ClientRelationVersionInfo); var writerk = new ByteBufferWriter(); writerk.WriteByteArrayRaw(ObjectDB.RelationVersionsPrefix); writerk.WriteVUInt32(_id); writerk.WriteVUInt32(ClientTypeVersion); var writerv = new ByteBufferWriter(); ClientRelationVersionInfo.Save(writerv); tr.KeyValueDBTransaction.SetKeyPrefix(ByteBuffer.NewEmpty()); tr.KeyValueDBTransaction.CreateOrUpdateKeyValue(writerk.Data, writerv.Data); if (LastPersistedVersion > 0) { CheckThatPrimaryKeyHasNotChanged(name, ClientRelationVersionInfo, _relationVersions[LastPersistedVersion]); UpdateSecondaryKeys(tr, ClientRelationVersionInfo, _relationVersions[LastPersistedVersion]); } } _typeConvertorGenerator = tr.Owner.TypeConvertorGenerator; }
ListTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, ITypeDescriptor itemDesc) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromItemDescriptor(itemDesc); }
public RelationInfoResolver(ObjectDB objectDB) { _fieldHandlerFactory = objectDB.FieldHandlerFactory; _typeConvertorGenerator = objectDB.TypeConvertorGenerator; }
public DictionaryTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, AbstractBufferedReader reader, Func<AbstractBufferedReader, ITypeDescriptor> nestedDescriptorReader) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromKeyValueDescriptors(nestedDescriptorReader(reader), nestedDescriptorReader(reader)); }
public ListTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, AbstractBufferedReader reader, Func<AbstractBufferedReader, ITypeDescriptor> nestedDescriptorReader) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromItemDescriptor(nestedDescriptorReader(reader)); }
DictionaryTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, ITypeDescriptor keyDesc, ITypeDescriptor valueDesc) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromKeyValueDescriptors(keyDesc, valueDesc); }
public ListTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, AbstractBufferedReader reader, Func <AbstractBufferedReader, ITypeDescriptor> nestedDescriptorReader) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromItemDescriptor(nestedDescriptorReader(reader)); }
public DictionaryTypeDescriptor(ITypeDescriptorCallbacks typeSerializers, AbstractBufferedReader reader, Func <AbstractBufferedReader, ITypeDescriptor> nestedDescriptorReader) { _convertorGenerator = typeSerializers.ConvertorGenerator; _typeSerializers = typeSerializers; InitFromKeyValueDescriptors(nestedDescriptorReader(reader), nestedDescriptorReader(reader)); }