Ejemplo n.º 1
0
        public int Decode(ref byte *src, int lSrc, ref byte *dst, int lDst)
        {
            var start = dst;
            var data  = (Int32Entry *)dst;
            var end   = src + lSrc;

            while (src < end)
            {
                data->ticks = _minTicks + Codec.DecodeInt64(ref src);

                data->value = Codec.DecodeInt32(ref src, out var isNegative);
                if (isNegative)
                {
                    data->value = -(_maxNegValue + data->value);
                }
                else
                {
                    data->value += _minPosValue;
                }

                data++;
            }

            return((int)((byte *)data - start));
        }
Ejemplo n.º 2
0
        public void TestEncodeDecodeInt64()
        {
            const int factor = 10;
            var       values = new long[64 * factor];

            for (var i = 1; i < 64; i++)
            {
                var value = (long)Math.Pow(2, i);

                values[i * factor]     = value - 2;
                values[i * factor + 1] = value - 1;
                values[i * factor + 2] = value;
                values[i * factor + 3] = value + 1;
                values[i * factor + 4] = value + 2;

                values[i * factor + 5] = -values[i * factor];
                values[i * factor + 6] = -values[i * factor + 1];
                values[i * factor + 7] = -values[i * factor + 2];
                values[i * factor + 8] = -values[i * factor + 3];
                values[i * factor + 9] = -values[i * factor + 4];
            }

            var buffer = stackalloc byte[9];

            for (var i = 0; i < values.Length; i++)
            {
                var p = buffer;
                Codec.EncodeInt64(values[i], ref p);

                p = buffer;
                var value = Codec.DecodeInt64(ref p);
                Assert.AreEqual(values[i], value, "At idx: " + i);
            }
        }
Ejemplo n.º 3
0
        public int DecodeHead(ref byte *src, int len)
        {
            var start = src;

            _minTicks    = Codec.DecodeInt64(ref src);
            _maxNegValue = Codec.DecodeInt32(ref src);
            _minPosValue = Codec.DecodeInt32(ref src);
            return((int)(src - start));
        }
Ejemplo n.º 4
0
        public static void DecodeMinDeltaU32(ref byte *src, int skip, byte *dst)
        {
            var len = *(int *)src;
            var end = src + len;

            src += sizeof(int);
            var next = sizeof(uint) + skip;

            *(long *)dst = Codec.DecodeInt64(ref src);
            var minDelta = Codec.DecodeInt64(ref src);

            dst += next;

            while (src < end)
            {
                *(long *)dst = *(long *)(dst - next) + minDelta + Codec.DecodeInt64(ref src);
                dst         += next;
            }
        }