public void CalculateNewCapacity(bool preferDirect) { IByteBufferAllocator allocator = this.NewAllocator(preferDirect); Assert.Equal(8, allocator.CalculateNewCapacity(1, 8)); Assert.Equal(7, allocator.CalculateNewCapacity(1, 7)); Assert.Equal(64, allocator.CalculateNewCapacity(1, 129)); Assert.Throws <ArgumentOutOfRangeException>(() => allocator.CalculateNewCapacity(8, 7)); Assert.Throws <ArgumentOutOfRangeException>(() => allocator.CalculateNewCapacity(-1, 8)); }
private static IByteBuffer ExpandCumulation(IByteBufferAllocator alloc, IByteBuffer oldCumulation, IByteBuffer input) { int oldBytes = oldCumulation.ReadableBytes; int newBytes = input.ReadableBytes; int totalBytes = oldBytes + newBytes; IByteBuffer newCumulation = alloc.Buffer(alloc.CalculateNewCapacity(totalBytes, int.MaxValue)); IByteBuffer toRelease = newCumulation; try { // This avoids redundant checks and stack depth compared to calling writeBytes(...) _ = newCumulation.SetBytes(0, oldCumulation, oldCumulation.ReaderIndex, oldBytes) .SetBytes(oldBytes, input, input.ReaderIndex, newBytes) .SetWriterIndex(totalBytes); _ = input.SetReaderIndex(input.WriterIndex); toRelease = oldCumulation; return(newCumulation); } finally { _ = toRelease.Release(); } }
public int CalculateNewCapacity(int minNewCapacity, int maxCapacity) => _allocator.CalculateNewCapacity(minNewCapacity, maxCapacity);