Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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;
        }