private Array DeserializeArray(TypeModel typeModel, int vectorLength, int vectorStart) { var elementType = typeModel.Type.GetElementType(); if (elementType == null) { throw new NotSupportedException(); } var array = Array.CreateInstance(elementType, vectorLength); var elementTypeModel = _typeModelRegistry.GetTypeModel(elementType); var elemmentSize = elementTypeModel.IsReferenceType ? BaseType.Struct.SizeOf() : typeModel.ElementType.SizeOf(); for (var i = 0; i < vectorLength; ++i) { object value = null; var valuePos = vectorStart + i * elemmentSize; if (elementTypeModel.IsReferenceType) { value = DeserializeElementReferenceType(valuePos, elementTypeModel); } else { value = DeserializeScalarValue(typeModel.ElementType, valuePos); } array.SetValue(value, i); } return(array); }
public SerializationContext(TypeModelRegistry typeModelRegistry, object rootObject, FlatBufferBuilder builder) { _typeModelRegistry = typeModelRegistry; _rootObject = rootObject; _rootTypeModel = _typeModelRegistry.GetTypeModel(rootObject.GetType()); _builder = builder; }
/// <summary> /// Writes a schema fragment of a type /// </summary> /// <param name="type">Type to emit</param> public void Write(Type type) { var typeModel = _typeModelRegistry.GetTypeModel(type); if (typeModel == null) { throw new ArgumentException("Could not determine TypeModel for TypeModel"); } Write(typeModel); }
/// <summary> /// Returns the <see cref="TypeModel"/> for this models ElementType /// </summary> /// <returns>Returns the ElementType TypeModel</returns> public TypeModel GetElementTypeModel() { var elementType = _clrType.GetElementType(); if (elementType != null) { return(_registry.GetTypeModel(elementType)); } else if (_clrType.IsGenericType) { var a = _clrType.GetGenericArguments(); if (a.Length > 0) { return(_registry.GetTypeModel(_clrType.GetGenericArguments()[0])); } } return(null); }
private int SerializeVector(ICollection collection) { var elementType = TypeHelpers.GetEnumerableElementType(collection.GetType()); var elementTypeModel = _typeModelRegistry.GetTypeModel(elementType); _builder.StartVector(elementTypeModel.InlineSize, collection.Count, elementTypeModel.InlineAlignment); foreach (var element in collection) { if (elementTypeModel.IsReferenceType) { _builder.AddOffset(_objectOffsets[element]); } else { SerializeInlineValue(element, elementTypeModel); } } return(_builder.EndVector().Value); }
public DeserializationContext(TypeModelRegistry typeModelRegistry, Type rootObjectType, ByteBuffer buffer) { _typeModelRegistry = typeModelRegistry; _rootTypeModel = _typeModelRegistry.GetTypeModel(rootObjectType); _buffer = buffer; }
/// <summary> /// Adds a .NET type to the schema. Type will be reflected into a <see cref="TypeModel"/> /// </summary> /// <param name="type">The type to add to the schema</param> /// <returns>A dependency node for the type</returns> public FlatBuffersSchemaTypeDependencyNode AddType(Type type) { var typeModel = _typeModelRegistry.GetTypeModel(type); return(AddType(typeModel)); }