public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var array = Unsafe.Read <bool[]>(fieldAddress); if (array == null) { output.WriteNull(); return; } var count = array.Length; if (count > 0) { var sizeTracker = output.BeginSizeTrack(); { output.EnsureNext(6 + (count * sizeof(bool))); output.Write7BitEncodedIntUnchecked(count); output.WriteByteUnchecked((byte)_elementDataType); output.WriteBoolsUnchecked(array, count); } output.WriteSizeTrack(sizeTracker); } else { output.EnsureNext(5); output.WriteIntUnchecked(1); //size tracker output.WriteByteUnchecked(0); } }
public override void Write(void *fieldAddress, SerializerOutput output) { var obj = Unsafe.Read <object>(fieldAddress); if (obj == null) { output.WriteNull(); return; } if (_stack >= MaxStack) { throw new CircularReferenceException("Circular references are not suported!"); } _stack++; var track = output.BeginSizeTrack(); var pinnable = Unsafe.As <object, PinnableObject>(ref obj); fixed(byte *objectAddress = &pinnable.Pinnable) { _fieldsSerializer.Write(objectAddress, output); } output.WriteSizeTrack(track); _stack--; }
public unsafe bool Serialize(SerializerOutput output, object o) { if (output == null) { throw new ArgumentNullException(nameof(output)); } var type = o.GetType(); if (TryGetDataSerializer(type, out var serializationMethods)) { if (type.IsValueType) { var pinnable = Unsafe.As <object, PinnableObject>(ref o); fixed(byte *objectAddress = &pinnable.Pinnable) { serializationMethods.Write(objectAddress, output); } } else { var fieldAddress = Unsafe.AsPointer(ref o); serializationMethods.Write(fieldAddress, output); } return(true); } return(false); }
public override void Write(void *fieldAddress, SerializerOutput output) { var track = output.BeginSizeTrack(); _fieldsSerializer.Write((byte *)fieldAddress, output); output.WriteSizeTrack(track); }
public override void Write(void *fieldAddress, SerializerOutput output) { var obj = Unsafe.Read <object>(fieldAddress);//obj should not be null here var pinnable = Unsafe.As <object, PinnableObject>(ref obj); fixed(byte *objectAddress = &pinnable.Pinnable) { _dataSerializer.Write(objectAddress + _fieldOffset, output); } }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { if (Unsafe.Read <object>(fieldAddress) == null) { output.WriteNull(); return; } var track = output.BeginSizeTrack(); _memberSerializer.Write((byte *)fieldAddress, output); output.WriteSizeTrack(track); }
public void Write(byte *objectAddress, SerializerOutput output) { output.WriteBytes(_headerData, _headerData.Length); var typeDataFields = _fields; var fieldsLength = typeDataFields.Length; for (var index = 0; index < fieldsLength; index++) { var fieldData = typeDataFields[index]; var dataSerializer = fieldData.SerializationMethods; dataSerializer.Write(objectAddress + fieldData.Offset, output); } }
public void Write(byte *objectAddress, SerializerOutput output) { var typeDataFields = Members; var fieldsLength = typeDataFields.Length; output.WriteBytes(_headerData, _headerData.Length); for (var index = 0; index < fieldsLength; index++) { var fieldData = typeDataFields[index]; var dataSerializer = fieldData.DataSerializer; dataSerializer.Write(objectAddress, output); } }
public unsafe bool SerializeTyped <T>(SerializerOutput output, T value) where T : struct { if (output == null) { throw new ArgumentNullException(nameof(output)); } var type = value.GetType(); if (TryGetDataSerializer(type, out var serializationMethods)) { var fieldAddress = Unsafe.AsPointer(ref value); serializationMethods.Write(fieldAddress, output); return(true); } return(true); }
public override void Write(void *fieldAddress, SerializerOutput output) { var array = Unsafe.Read <Array>(fieldAddress); if (array == null) { output.WriteNull(); return; } var count = array.Length; if (count > 0) { var sizeTracker = output.BeginSizeTrack(); { output.EnsureNext(6); output.Write7BitEncodedIntUnchecked(count); output.WriteByteUnchecked((byte)_elementDataType); var pinnable = Unsafe.As <Array, byte[]>(ref array); fixed(byte *address = pinnable) { var tempAddress = address; for (var index = 0; index < count; index++) { _elementSerializer.Write(tempAddress, output); tempAddress += _size; } } } output.WriteSizeTrack(sizeTracker); } else { output.EnsureNext(5); output.WriteIntUnchecked(1); //size tracker output.WriteByteUnchecked(0); } }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var value = *(float *)(fieldAddress); output.WriteFloat(value); }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var obj = Unsafe.Read <string>(fieldAddress); output.WriteString(obj); }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var value = *(long *)(fieldAddress); output.WriteInt64(value); }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var value = *(ushort *)(fieldAddress); output.WriteUInt16(value); }
public override void Write(void *fieldAddress, SerializerOutput output) { ref var instance = ref Unsafe.AsRef <T>(fieldAddress);
public override void Write(void *fieldAddress, SerializerOutput output) { var value = _get(Unsafe.Read <T>(fieldAddress)); _dataSerializer.Write(Unsafe.AsPointer(ref value), output); }
public abstract void Write(void *fieldAddress, SerializerOutput output);
public override void Write(void *fieldAddress, SerializerOutput output) { var address = (byte *)fieldAddress + _fieldOffset; _dataSerializer.Write(address, output); }
public override unsafe void Write(void *fieldAddress, SerializerOutput output) { var value = *(double *)(fieldAddress); output.WriteDouble(value); }
public override void Write(void *fieldAddress, SerializerOutput output) { throw new NotImplementedException(); }
public void Serialize(ref T item, SerializerOutput output) { var childAddress = Unsafe.AsPointer(ref item); _methods.Write(childAddress, output); }