// ReSharper disable once InconsistentNaming internal void SetIOBuffer(IOBuffer ioBuffer) { if (ioBuffer != null) { IOBuffer = ioBuffer; // Buffer must be assigned first, as it will reset BufferOffset and BufferLength Buffer = ioBuffer.Buffer; BufferOffset = ioBuffer.Offset; BufferLength = ioBuffer.Length; } else { IOBuffer = null; Buffer = null; } }
/// <summary> /// Returns an <see cref="IOBuffer"/>. /// </summary> /// <returns>The <see cref="IOBuffer"/>, or null if no buffer is available.</returns> public virtual IOBuffer GetBuffer() { lock (_freeIndexPool) { EnsureBufferAllocated(); if (_freeIndexPool.Count > 0) { return new IOBuffer(_buffer, _freeIndexPool.Pop(), _bufferSize); } else { if ((_numberOfBytes - _bufferSize) >= _currentIndex) { var result = new IOBuffer(_buffer, _currentIndex, _bufferSize); _currentIndex += _bufferSize; return result; } } return null; } }
/// <summary> /// Releases the buffer allocated to an <see cref="IOBuffer"/> instance. /// </summary> /// <param name="buffer">The instance the buffer will be released from.</param> public void ReleaseBuffer(IOBuffer buffer) { ReleaseBuffer(buffer.Offset); }