Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ ReadCore()

unsafe int System.IO.UnmanagedMemoryStream.ReadCore ( Span< byte > buffer)
inlinepackageinherited

Definition at line 311 of file UnmanagedMemoryStream.cs.

312 {
315 long num = Interlocked.Read(ref _position);
316 long num2 = Interlocked.Read(ref _length);
317 long num3 = Math.Min(num2 - num, buffer.Length);
318 if (num3 <= 0)
319 {
320 return 0;
321 }
322 int num4 = (int)num3;
323 if (num4 < 0)
324 {
325 return 0;
326 }
327 if (_buffer != null)
328 {
329 byte* pointer = null;
330 try
331 {
333 Buffer.Memmove(ref MemoryMarshal.GetReference(buffer), ref (pointer + num)[_offset], (nuint)num4);
334 }
335 finally
336 {
337 if (pointer != null)
338 {
340 }
341 }
342 }
343 else
344 {
345 Buffer.Memmove(ref MemoryMarshal.GetReference(buffer), ref _mem[num], (nuint)num4);
346 }
347 Interlocked.Exchange(ref _position, num + num3);
348 return num4;
349 }
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._length, System.IO.UnmanagedMemoryStream._mem, System.IO.UnmanagedMemoryStream._offset, System.IO.UnmanagedMemoryStream._position, System.Runtime.InteropServices.SafeBuffer.AcquirePointer(), System.buffer, System.IO.UnmanagedMemoryStream.EnsureNotClosed(), System.IO.UnmanagedMemoryStream.EnsureReadable(), System.Threading.Interlocked.Exchange(), System.Buffer.Memmove(), System.Math.Min(), System.pointer, System.Threading.Interlocked.Read(), and System.Runtime.InteropServices.SafeBuffer.ReleasePointer().

Referenced by System.IO.UnmanagedMemoryStream.Read(), System.IO.PinnedBufferMemoryStream.Read(), and System.IO.UnmanagedMemoryStream.Read().