示例#1
0
        public AppendableByteArraySegment Clone()
        {
            var s = new AppendableByteArraySegment(_arraySegments.Length);

            for (var i = 0; i < _p; i++)
            {
                var arraySegment = _arraySegments[i];
                s.Append(arraySegment);
            }

            return(s);
        }
示例#2
0
        // ref key current not use
        private void ParseEntry(int offset, ref AppendableByteArraySegment key, ref ArraySegment <byte> value)
        {
            var pb = new CodedInputStream(_data, offset, _restartOffset - offset);

            var shared      = pb.ReadInt32();
            var nonShared   = pb.ReadInt32();
            var valueLength = pb.ReadInt32();

            if (key.Length < shared)
            {
                throw new InvalidDataException("bad entry in block - shared > _key.length");
            }

            var p = (int)pb.Position;

            key.TrimToLength(shared);
            key.Append(new ArraySegment <byte>(_data, p, nonShared));
            value = new ArraySegment <byte>(_data, p + nonShared, valueLength);
        }