public void ReferenceCounts3() { IByteBuffer c1 = Unpooled.Buffer().WriteByte(1); var c2 = (IByteBuffer)Unpooled.Buffer().WriteByte(2).Retain(); var c3 = (IByteBuffer)Unpooled.Buffer().WriteByte(3).Retain(2); CompositeByteBuffer buf = Unpooled.CompositeBuffer(); Assert.Equal(1, buf.ReferenceCount); var components = new List <IByteBuffer> { c1, c2, c3 }; buf.AddComponents(components); // Ensure that c[123]'s refCount did not change. Assert.Equal(1, c1.ReferenceCount); Assert.Equal(2, c2.ReferenceCount); Assert.Equal(3, c3.ReferenceCount); Assert.Equal(1, buf[0].ReferenceCount); Assert.Equal(2, buf[1].ReferenceCount); Assert.Equal(3, buf[2].ReferenceCount); c3.Release(2); c2.Release(); buf.Release(); }
public IByteBuffer ToByteBuffer() { CompositeByteBuffer compositeBuffer = ArrayPooled.CompositeBuffer(); _ = compositeBuffer.AddComponents(this.value); _ = compositeBuffer.SetWriterIndex(this.size); _ = compositeBuffer.SetReaderIndex(0); return compositeBuffer; }
public IByteBuffer ToByteBuffer() { CompositeByteBuffer compositeBuffer = Unpooled.CompositeBuffer(this.value.Count); compositeBuffer.AddComponents(this.value); compositeBuffer.SetWriterIndex(this.size); compositeBuffer.SetReaderIndex(0); return(compositeBuffer); }
public override void AddContent(IByteBuffer buffer, bool last) { if (buffer is object) { long localsize = buffer.ReadableBytes; CheckSize(Size + localsize, MaxSize); if (DefinedSize > 0 && DefinedSize < Size + localsize) { ThrowHelper.ThrowIOException_OutOfSize(Size + localsize, DefinedSize); } Size += localsize; if (_byteBuf is null) { _byteBuf = buffer; } else if (_byteBuf is CompositeByteBuffer buf) { _ = buf.AddComponent(true, buffer); _ = buf.SetWriterIndex((int)Size); } else { CompositeByteBuffer compositeBuffer = ArrayPooled.CompositeBuffer(int.MaxValue); _ = compositeBuffer.AddComponents(true, _byteBuf, buffer); _ = compositeBuffer.SetWriterIndex((int)Size); _byteBuf = compositeBuffer; } } if (last) { SetCompleted(); } else { if (buffer is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.buffer); } } }
public override void AddContent(IByteBuffer buffer, bool last) { if (buffer != null) { long localsize = buffer.ReadableBytes; this.CheckSize(this.Size + localsize); if (this.DefinedSize > 0 && this.DefinedSize < this.Size + localsize) { throw new IOException($"Out of size: {(this.Size + localsize)} > {this.DefinedSize}"); } this.Size += localsize; if (this.byteBuf == null) { this.byteBuf = buffer; } else if (this.byteBuf is CompositeByteBuffer buf) { buf.AddComponent(true, buffer); buf.SetWriterIndex((int)this.Size); } else { CompositeByteBuffer compositeBuffer = Unpooled.CompositeBuffer(int.MaxValue); compositeBuffer.AddComponents(true, this.byteBuf, buffer); compositeBuffer.SetWriterIndex((int)this.Size); this.byteBuf = compositeBuffer; } } if (last) { this.SetCompleted(); } else { if (buffer == null) { throw new ArgumentNullException(nameof(buffer)); } } }
public void AddEmptyBuffersRelease() { CompositeByteBuffer cbuf = Unpooled.CompositeBuffer(); IByteBuffer buf = Unpooled.Buffer(); IByteBuffer buf2 = Unpooled.Buffer().WriteInt(1); IByteBuffer buf3 = Unpooled.Buffer(); Assert.Equal(1, buf.ReferenceCount); Assert.Equal(1, buf2.ReferenceCount); Assert.Equal(1, buf3.ReferenceCount); cbuf.AddComponents(buf, buf2, buf3); Assert.Equal(1, buf.ReferenceCount); Assert.Equal(1, buf2.ReferenceCount); Assert.Equal(1, buf3.ReferenceCount); cbuf.Release(); Assert.Equal(0, buf.ReferenceCount); Assert.Equal(0, buf2.ReferenceCount); Assert.Equal(0, buf3.ReferenceCount); }
public void ReferenceCounts2() { IByteBuffer c1 = Unpooled.Buffer().WriteByte(1); var c2 = (IByteBuffer)Unpooled.Buffer().WriteByte(2).Retain(); var c3 = (IByteBuffer)Unpooled.Buffer().WriteByte(3).Retain(2); CompositeByteBuffer bufA = Unpooled.CompositeBuffer(); bufA.AddComponents(c1, c2, c3).SetWriterIndex(3); CompositeByteBuffer bufB = Unpooled.CompositeBuffer(); bufB.AddComponents((IByteBuffer)bufA); // Ensure that bufA.refCnt() did not change. Assert.Equal(1, bufA.ReferenceCount); // Ensure that c[123]'s refCnt did not change. Assert.Equal(1, c1.ReferenceCount); Assert.Equal(2, c2.ReferenceCount); Assert.Equal(3, c3.ReferenceCount); // This should decrease bufA.refCnt(). bufB.Release(); Assert.Equal(0, bufB.ReferenceCount); // Ensure bufA.refCnt() changed. Assert.Equal(0, bufA.ReferenceCount); // Ensure that c[123]'s refCnt also changed due to the deallocation of bufA. Assert.Equal(0, c1.ReferenceCount); Assert.Equal(1, c2.ReferenceCount); Assert.Equal(2, c3.ReferenceCount); c3.Release(2); c2.Release(); }