Esempio n. 1
0
 public override void Retain()
 {
     if (IsDisposed)
     {
         RioPipelinesThrowHelper.ThrowObjectDisposedException(nameof(RioMemoryPoolBlock));
     }
     Interlocked.Increment(ref _referenceCount);
 }
Esempio n. 2
0
 public override Span <byte> GetSpan()
 {
     if (IsDisposed)
     {
         RioPipelinesThrowHelper.ThrowObjectDisposedException(nameof(RioMemoryPoolBlock));
     }
     return(new Span <byte>(Slab.Array, _offset, _length));
 }
Esempio n. 3
0
 // In kestrel both MemoryPoolBlock and OwnedMemory end up in the same assembly so
 // this method access modifiers need to be `protected internal`
 protected override bool TryGetArray(out ArraySegment <byte> arraySegment)
 {
     if (IsDisposed)
     {
         RioPipelinesThrowHelper.ThrowObjectDisposedException(nameof(RioMemoryPoolBlock));
     }
     arraySegment = new ArraySegment <byte>(Slab.Array, _offset, _length);
     return(true);
 }
Esempio n. 4
0
 public override MemoryHandle Pin(int elementIndex = 0)
 {
     Retain();   // checks IsDisposed
     if (elementIndex < 0 || elementIndex > _length)
     {
         RioPipelinesThrowHelper.ThrowArgumentOutOfRangeException(_length, elementIndex);
     }
     unsafe
     {
         return(new MemoryHandle((Slab.NativePointer + _offset + elementIndex).ToPointer(), default, this));
Esempio n. 5
0
 public override MemoryHandle Pin()
 {
     if (IsDisposed)
     {
         RioPipelinesThrowHelper.ThrowObjectDisposedException(nameof(RioMemoryPoolBlock));
     }
     Retain();
     unsafe
     {
         return(new MemoryHandle(this, (Slab.NativePointer + _offset).ToPointer()));
     }
 }
Esempio n. 6
0
 public override MemoryHandle Pin(int byteOffset = 0)
 {
     Retain();   // checks IsDisposed
     if (byteOffset < 0 || byteOffset > _length)
     {
         RioPipelinesThrowHelper.ThrowArgumentOutOfRangeException(_length, byteOffset);
     }
     unsafe
     {
         return(new MemoryHandle(this, (Slab.NativePointer + _offset + byteOffset).ToPointer()));
     }
 }
Esempio n. 7
0
        public override OwnedMemory <byte> Rent(int size = AnySize)
        {
            if (size == AnySize)
            {
                size = _blockLength;
            }
            else if (size > _blockLength)
            {
                RioPipelinesThrowHelper.ThrowArgumentOutOfRangeException_BufferRequestTooLarge(_blockLength);
            }

            var block = Lease();

            return(block);
        }
Esempio n. 8
0
        public override bool Release()
        {
            int newRefCount = Interlocked.Decrement(ref _referenceCount);

            if (newRefCount < 0)
            {
                RioPipelinesThrowHelper.ThrowInvalidOperationException(ExceptionResource.ReferenceCountZero);
            }
            if (newRefCount == 0)
            {
                OnZeroReferences();
                return(false);
            }
            return(true);
        }