This repository was archived by the owner on Jan 23, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +17
-3
lines changed
src/mscorlib/shared/System Expand file tree Collapse file tree 4 files changed +17
-3
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,18 @@ public unsafe struct MemoryHandle : IDisposable
2121 _handle = handle ;
2222 }
2323
24+ internal void AddOffset ( int offset )
25+ {
26+ if ( _pointer == null )
27+ {
28+ ThrowHelper . ThrowArgumentNullException ( ExceptionArgument . pointer ) ;
29+ }
30+ else
31+ {
32+ _pointer = ( void * ) ( ( byte * ) _pointer + offset ) ;
33+ }
34+ }
35+
2436 [ CLSCompliant ( false ) ]
2537 public void * Pointer => _pointer ;
2638
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ public Memory<T> Memory
2525 }
2626 }
2727
28- public abstract MemoryHandle Pin ( int offset = 0 ) ;
28+ public abstract MemoryHandle Pin ( ) ;
2929
3030 protected internal abstract bool TryGetArray ( out ArraySegment < T > arraySegment ) ;
3131
Original file line number Diff line number Diff line change @@ -234,7 +234,8 @@ public unsafe MemoryHandle Retain(bool pin = false)
234234 {
235235 if ( _index < 0 )
236236 {
237- memoryHandle = ( ( OwnedMemory < T > ) _object ) . Pin ( ( _index & RemoveOwnedFlagBitMask ) * Unsafe . SizeOf < T > ( ) ) ;
237+ memoryHandle = ( ( OwnedMemory < T > ) _object ) . Pin ( ) ;
238+ memoryHandle . AddOffset ( ( _index & RemoveOwnedFlagBitMask ) * Unsafe . SizeOf < T > ( ) ) ;
238239 }
239240 else if ( typeof ( T ) == typeof ( char ) && _object is string s )
240241 {
Original file line number Diff line number Diff line change @@ -216,7 +216,8 @@ public unsafe MemoryHandle Retain(bool pin = false)
216216 {
217217 if ( _index < 0 )
218218 {
219- memoryHandle = ( ( OwnedMemory < T > ) _object ) . Pin ( ( _index & RemoveOwnedFlagBitMask ) * Unsafe . SizeOf < T > ( ) ) ;
219+ memoryHandle = ( ( OwnedMemory < T > ) _object ) . Pin ( ) ;
220+ memoryHandle . AddOffset ( ( _index & RemoveOwnedFlagBitMask ) * Unsafe . SizeOf < T > ( ) ) ;
220221 }
221222 else if ( typeof ( T ) == typeof ( char ) && _object is string s )
222223 {
You can’t perform that action at this time.
0 commit comments