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

◆ ReadSpan< T >()

unsafe void System.Runtime.InteropServices.SafeBuffer.ReadSpan< T > ( ulong byteOffset,
Span< T > buffer )
inlineinherited
Type Constraints
T :struct 

Definition at line 129 of file SafeBuffer.cs.

129 : struct
130 {
132 {
133 throw NotInitialized();
134 }
135 uint num = AlignedSizeOf<T>();
136 byte* ptr = (byte*)(void*)handle + byteOffset;
137 SpaceCheck(ptr, checked((nuint)(num * buffer.Length)));
138 bool success = false;
139 try
140 {
141 DangerousAddRef(ref success);
142 ref T reference = ref MemoryMarshal.GetReference(buffer);
143 for (int i = 0; i < buffer.Length; i++)
144 {
145 Buffer.Memmove(ref Unsafe.Add(ref reference, i), ref Unsafe.AsRef<T>(ptr + num * i), 1u);
146 }
147 }
148 finally
149 {
150 if (success)
151 {
153 }
154 }
155 }
unsafe void SpaceCheck(byte *ptr, nuint sizeInBytes)
static InvalidOperationException NotInitialized()
void DangerousAddRef(ref bool success)
Definition SafeHandle.cs:76

References System.Runtime.InteropServices.SafeBuffer._numBytes, System.Runtime.InteropServices.SafeBuffer.AlignedSizeOf< T >(), System.buffer, System.Runtime.InteropServices.SafeHandle.DangerousAddRef(), System.Runtime.InteropServices.SafeHandle.DangerousRelease(), System.Runtime.InteropServices.SafeHandle.handle, System.Buffer.Memmove(), System.Runtime.InteropServices.SafeBuffer.NotInitialized(), System.Runtime.InteropServices.SafeBuffer.SpaceCheck(), and System.Runtime.InteropServices.SafeBuffer.Uninitialized.