예제 #1
0
        public SlicedByteBuf(ByteBuf buffer, int index, int length)
            : base(length)
        {
            if (index < 0 || index > buffer.Capacity - length)
            {
                throw new IndexOutOfRangeException(buffer + ".slice(" + index + ", " + length + ')');
            }

            if (buffer is SlicedByteBuf)
            {
                _buffer     = ((SlicedByteBuf)buffer)._buffer;
                _adjustment = ((SlicedByteBuf)buffer)._adjustment + index;
            }
            else if (buffer is DuplicatedByteBuf)
            {
                _buffer     = buffer.Unwrap();
                _adjustment = index;
            }
            else
            {
                _buffer     = buffer;
                _adjustment = index;
            }
            _length = length;
            SetWriterIndex(length);
        }