Exemple #1
0
        void PackVIntIsOrderableForPositiveCore(long t)
        {
            var buf1 = new byte[9];
            var o1   = 0;

            PackUnpack.PackVInt(buf1, ref o1, t - 1);
            var buf2 = new byte[9];
            var o2   = 0;

            PackUnpack.PackVInt(buf2, ref o2, t);
            if (t >= int.MinValue && t <= int.MaxValue)
            {
                Assert.Equal(o2, PackUnpack.LengthVInt((int)t));
            }
            Assert.Equal(o2, PackUnpack.LengthVInt(t));
            Assert.Equal(o2, PackUnpack.LengthVInt(buf2, 0));
            Assert.True(0 > BitArrayManipulation.CompareByteArray(buf1, o1, buf2, o2));
            var o1A = 0;

            Assert.Equal(t - 1, PackUnpack.UnpackVInt(buf1, ref o1A));
            Assert.Equal(o1, o1A);
            var o2A = 0;

            Assert.Equal(t, PackUnpack.UnpackVInt(buf2, ref o2A));
            Assert.Equal(o2, o2A);
        }
Exemple #2
0
        public long ReadVInt64()
        {
            NeedOneByteInBuffer();
            var  l = PackUnpack.LengthVInt(Buf, Pos);
            long res;

            if (Pos + l <= End)
            {
                res = PackUnpack.UnpackVInt(Buf, ref Pos);
            }
            else
            {
                res = (Buf[Pos] >= 0x80) ? 0 : -1;
                if (l < 8)
                {
                    res <<= 8 - l;
                }
                res += Buf[Pos] & (0xff >> l);
                do
                {
                    Pos++;
                    res <<= 8;
                    NeedOneByteInBuffer();
                    res += Buf[Pos];
                    l--;
                } while (l > 1);
                Pos++;
            }
            return(res);
        }
Exemple #3
0
        public void WriteVInt64(long value)
        {
            var len = PackUnpack.LengthVInt(value);

            if ((uint)_buf.Length < (uint)len)
            {
                Resize(len);
            }

            PackUnpack.UnsafePackVInt(ref PackUnpack.UnsafeGetAndAdvance(ref _buf, len), value, len);
        }
Exemple #4
0
        public void WriteVInt64(long value)
        {
            var len = PackUnpack.LengthVInt(value);

            if ((uint)Buf.Length < len)
            {
                if (!Resize(len))
                {
                    Span <byte> buf    = stackalloc byte[(int)len];
                    ref var     bufRef = ref MemoryMarshal.GetReference(buf);
                    PackUnpack.UnsafePackVInt(ref bufRef, value, len);
                    WriteBlock(ref bufRef, len);
                    return;
                }
            }
Exemple #5
0
        public void WriteVInt64(long value)
        {
            var l = PackUnpack.LengthVInt(value);

            if (Pos + l > End)
            {
                FlushBuffer();
                if (Pos + l > End)
                {
                    var b = new byte[l];
                    int i = 0;
                    PackUnpack.PackVInt(b, ref i, value);
                    WriteBlock(b);
                    return;
                }
            }
            PackUnpack.PackVInt(Buf, ref Pos, value);
        }
Exemple #6
0
        public void WriteVInt64(long value)
        {
            var len = PackUnpack.LengthVInt(value);

            if (Pos + len > End)
            {
                FlushBuffer();
                if (Pos + len > End)
                {
                    Span <byte> buf = stackalloc byte[len];
                    PackUnpack.UnsafePackVInt(ref MemoryMarshal.GetReference(buf), value, len);
                    WriteBlock(buf);
                    return;
                }
            }

            PackUnpack.UnsafePackVInt(ref Unsafe.AddByteOffset(ref MemoryMarshal.GetReference(Buf.AsSpan()), (IntPtr)Pos), value, len);
            Pos += len;
        }
Exemple #7
0
        public void SkipVInt64()
        {
            NeedOneByteInBuffer();
            var l = PackUnpack.LengthVInt(Buf, Pos);

            if (Pos + l <= End)
            {
                Pos += l;
            }
            else
            {
                do
                {
                    Pos++;
                    NeedOneByteInBuffer();
                    l--;
                } while (l > 1);
                Pos++;
            }
        }