public T Read <T>() where T : unmanaged, IFormattable { Debug.Assert(BinaryIOUtils.IsByteSwappableType(typeof(T))); var datumSize = Unsafe.SizeOf <T>(); var bufferReadSpan = Input.GetBufferReadSpan(datumSize); if (ByteOrder != BinaryIOUtils.NativeByteOrder) { bufferReadSpan.Reverse(); } return(Unsafe.ReadUnaligned <T>(ref MemoryMarshal.GetReference(bufferReadSpan))); }
public void Read <T>(Span <T> data) where T : unmanaged, IFormattable { Debug.Assert(BinaryIOUtils.IsByteSwappableType(typeof(T))); if (ByteOrder == BinaryIOUtils.NativeByteOrder) { Input.ReadAll(MemoryMarshal.AsBytes(data)); } else { for (var i = 0; i < data.Length; i++) { Read(out data[i]); } } }
public void Write <T>(ReadOnlySpan <T> data) where T : unmanaged, IFormattable { Debug.Assert(BinaryIOUtils.IsByteSwappableType(typeof(T))); if (ByteOrder == BinaryIOUtils.NativeByteOrder) { Output.WriteBytes(MemoryMarshal.AsBytes(data)); } else { for (var i = 0; i < data.Length; i++) { Write(data[i]); } } }
public void Write <T>(T datum) where T : unmanaged, IFormattable { Debug.Assert(BinaryIOUtils.IsByteSwappableType(typeof(T))); var datumSize = Unsafe.SizeOf <T>(); var bufferWriteSpan = Output.GetBufferWriteSpan(datumSize); Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bufferWriteSpan), datum); if (ByteOrder != BinaryIOUtils.NativeByteOrder) { bufferWriteSpan.Reverse(); } Output.Position += datumSize; }