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

◆ Initialize()

unsafe void System.IO.UnmanagedMemoryAccessor.Initialize ( SafeBuffer buffer,
long offset,
long capacity,
FileAccess access )
inlineprotectedinherited

Definition at line 64 of file UnmanagedMemoryAccessor.cs.

65 {
66 if (buffer == null)
67 {
68 throw new ArgumentNullException("buffer");
69 }
70 if (offset < 0)
71 {
72 throw new ArgumentOutOfRangeException("offset", SR.ArgumentOutOfRange_NeedNonNegNum);
73 }
74 if (capacity < 0)
75 {
76 throw new ArgumentOutOfRangeException("capacity", SR.ArgumentOutOfRange_NeedNonNegNum);
77 }
78 if (buffer.ByteLength < (ulong)(offset + capacity))
79 {
80 throw new ArgumentException(SR.Argument_OffsetAndCapacityOutOfBounds);
81 }
82 if (access < FileAccess.Read || access > FileAccess.ReadWrite)
83 {
84 throw new ArgumentOutOfRangeException("access");
85 }
86 if (_isOpen)
87 {
88 throw new InvalidOperationException(SR.InvalidOperation_CalledTwice);
89 }
90 byte* pointer = null;
91 try
92 {
93 buffer.AcquirePointer(ref pointer);
94 if ((nuint)((long)pointer + offset + capacity) < (nuint)pointer)
95 {
96 throw new ArgumentException(SR.Argument_UnmanagedMemAccessorWrapAround);
97 }
98 }
99 finally
100 {
101 if (pointer != null)
102 {
103 buffer.ReleasePointer();
104 }
105 }
106 _offset = offset;
107 _buffer = buffer;
109 _access = access;
110 _isOpen = true;
111 _canRead = (_access & FileAccess.Read) != 0;
112 _canWrite = (_access & FileAccess.Write) != 0;
113 }

References System.IO.UnmanagedMemoryAccessor._access, System.IO.UnmanagedMemoryAccessor._buffer, System.IO.UnmanagedMemoryAccessor._canRead, System.IO.UnmanagedMemoryAccessor._canWrite, System.IO.UnmanagedMemoryAccessor._capacity, System.IO.UnmanagedMemoryAccessor._isOpen, System.IO.UnmanagedMemoryAccessor._offset, System.SR.Argument_OffsetAndCapacityOutOfBounds, System.SR.Argument_UnmanagedMemAccessorWrapAround, System.SR.ArgumentOutOfRange_NeedNonNegNum, System.buffer, System.capacity, System.SR.InvalidOperation_CalledTwice, System.offset, and System.pointer.

Referenced by System.IO.MemoryMappedFiles.MemoryMappedViewAccessor.MemoryMappedViewAccessor(), System.IO.UnmanagedMemoryAccessor.UnmanagedMemoryAccessor(), and System.IO.UnmanagedMemoryAccessor.UnmanagedMemoryAccessor().