public Type ReadType(VoxBinaryReader reader) { var typeCount = reader.ReadVariableInt(); var typeIds = GetTypeIdBuffer(typeCount); for (var i = 0; i < typeCount; i++) { typeIds[i] = reader.ReadVariableInt(); } var key = new TypeIdsAndCount { Count = typeCount, TypeIds = typeIds }; var result = typesByTypeIdParts.GetOrAdd(key, cloneKeyFunc, unpackTypesFunc); return(result); }
public object ReadBody(VoxBinaryReader reader) { var dataLength = reader.ReadVariableInt(); reader.HandleEnterInnerBuffer(dataLength); try { var elementCount = reader.ReadVariableInt(); var elements = Array.CreateInstance(elementType, elementCount); for (var i = 0; i < elements.Length; i++) { var thing = thingReaderWriterDispatcherThing.ReadThing(reader, null); elements.SetValue(thing, i); } return(InternalRepresentationToHintTypeConverter.ConvertCollectionToHintType(elements, userCollectionType)); } finally { reader.HandleLeaveInnerBuffer(); } }
public object ReadBody(VoxBinaryReader reader) { var length = reader.ReadVariableInt(); reader.HandleEnterInnerBuffer(length); try { var slotCount = reader.ReadVariableInt(); var readerThing = new ReaderThing(thisIsTotesTheRealLegitThingReaderWriterThing, reader, slotCount); try { var subject = Activator.CreateInstance(typeof(TUserType)); userTypeSerializer.Deserialize(readerThing, (TUserType)subject); return(subject); } catch (Exception e) { logger.Error($"Failed to instantiate or deserialize instance of type {typeof(TUserType).Name}."); throw; } } finally { reader.HandleLeaveInnerBuffer(); } }
public object ReadBody(VoxBinaryReader reader) { var length = reader.ReadVariableInt(); reader.HandleEnterInnerBuffer(length); try { var key = thisIsTotesTheRealLegitThingReaderWriterThing.ReadThing(reader, userKeyType); var value = thisIsTotesTheRealLegitThingReaderWriterThing.ReadThing(reader, userValueType); return(Activator.CreateInstance(userKvpType, key, value)); } finally { reader.HandleLeaveInnerBuffer(); } }