Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WriteByte()

unsafe override void System.IO.UnmanagedMemoryStream.WriteByte ( byte value)
inlinevirtualinherited

Reimplemented from System.IO.Stream.

Definition at line 598 of file UnmanagedMemoryStream.cs.

599 {
602 long num = Interlocked.Read(ref _position);
603 long num2 = Interlocked.Read(ref _length);
604 long num3 = num + 1;
605 if (num >= num2)
606 {
607 if (num3 < 0)
608 {
609 throw new IOException(SR.IO_StreamTooLong);
610 }
611 if (num3 > _capacity)
612 {
613 throw new NotSupportedException(SR.IO_FixedCapacity);
614 }
615 if (_buffer == null)
616 {
617 if (num > num2)
618 {
619 Buffer.ZeroMemory(_mem + num2, (nuint)(num - num2));
620 }
621 Interlocked.Exchange(ref _length, num3);
622 }
623 }
624 if (_buffer != null)
625 {
626 byte* pointer = null;
627 try
628 {
630 (pointer + num)[_offset] = value;
631 }
632 finally
633 {
634 if (pointer != null)
635 {
637 }
638 }
639 }
640 else
641 {
642 _mem[num] = value;
643 }
644 Interlocked.Exchange(ref _position, num3);
645 }
unsafe void AcquirePointer(ref byte *pointer)
Definition SafeBuffer.cs:58
static int Exchange(ref int location1, int value)
static long Read(ref long location)

References System.IO.UnmanagedMemoryStream._buffer, System.IO.UnmanagedMemoryStream._capacity, System.IO.UnmanagedMemoryStream._length, System.IO.UnmanagedMemoryStream._mem, System.IO.UnmanagedMemoryStream._offset, System.IO.UnmanagedMemoryStream._position, System.Runtime.InteropServices.SafeBuffer.AcquirePointer(), System.IO.UnmanagedMemoryStream.EnsureNotClosed(), System.IO.UnmanagedMemoryStream.EnsureWriteable(), System.Threading.Interlocked.Exchange(), System.SR.IO_FixedCapacity, System.SR.IO_StreamTooLong, System.pointer, System.Threading.Interlocked.Read(), System.Runtime.InteropServices.SafeBuffer.ReleasePointer(), System.value, and System.Buffer.ZeroMemory().

Referenced by System.IO.UnmanagedMemoryStreamWrapper.WriteByte().