Example #1
0
        public uint UnpackInt(PropertyInfo info, Bitstream stream)
        {
            var flags = info.Flags;

            if (flags.HasFlag(PropertyInfo.MultiFlag.EncodedAgainstTickcount))
            {
                if (flags.HasFlag(PropertyInfo.MultiFlag.Unsigned))
                {
                    return(stream.ReadVarUInt());
                }
                else
                {
                    uint value = stream.ReadVarUInt();
                    return(unchecked ((uint)((-(value & 1)) ^ (value >> 1))));
                }
            }
            else
            {
                byte numBits = info.NumBits;

                uint isUnsigned = Convert.ToUInt32(flags.HasFlag(PropertyInfo.MultiFlag.Unsigned));
                uint signer     = (0x80000000 >> (32 - numBits)) & unchecked ((uint)(isUnsigned - 1));

                uint value = stream.ReadBits(numBits) ^ signer;
                return(value - signer);
            }
        }
Example #2
0
        private void HandleMessage(Bitstream stream)
        {
            uint type   = stream.ReadVarUInt();
            uint length = stream.ReadVarUInt();

            byte[] bytes = new byte[length];
            stream.Read(bytes, 0, (int)length);

            receivedInBand.Enqueue(new Message {
                Type = type,
                Data = bytes,
            });
        }
Example #3
0
        public ulong UnpackInt64(PropertyInfo info, Bitstream stream)
        {
            if (info.Flags.HasFlag(PropertyInfo.MultiFlag.EncodedAgainstTickcount))
            {
                return(stream.ReadVarUInt());
            }
            var negate     = false;
            var secondBits = (byte)(info.NumBits - 32);

            if (!info.Flags.HasFlag(PropertyInfo.MultiFlag.Unsigned))
            {
                --secondBits;

                if (stream.ReadBool())
                {
                    negate = true;
                }
            }

            ulong a     = stream.ReadBits(32);
            ulong b     = stream.ReadBits(secondBits);
            var   value = (b << 32) | a;

            if (negate)
            {
                value = unchecked ((ulong)((long)value * -1));
            }

            return(value);
        }
Example #4
0
        public uint UnpackInt(PropertyInfo info, Bitstream stream) {
            var flags = info.Flags;

            if (flags.HasFlag(PropertyInfo.MultiFlag.EncodedAgainstTickcount)) {
                if (flags.HasFlag(PropertyInfo.MultiFlag.Unsigned)) {
                    return stream.ReadVarUInt();
                } else {
                    uint value = stream.ReadVarUInt();
                    return unchecked((uint) ((-(value & 1)) ^ (value >> 1)));
                }
            } else {
                byte numBits = info.NumBits;

                uint isUnsigned = Convert.ToUInt32(flags.HasFlag(PropertyInfo.MultiFlag.Unsigned));
                uint signer = (0x80000000 >> (32 - numBits)) & unchecked((uint) (isUnsigned - 1));

                uint value = stream.ReadBits(numBits) ^ signer;
                return value - signer;
            }
        }
Example #5
0
        private uint ReadFieldNumber(uint lastField, Bitstream stream)
        {
            if (stream.ReadBool())
            {
                return(unchecked (lastField + 1));
            }
            var value = stream.ReadVarUInt();

            if (value == 0x3FFF)
            {
                return(uint.MaxValue);
            }
            return(unchecked (lastField + value + 1));
        }
Example #6
0
        public ulong UnpackInt64(PropertyInfo info, Bitstream stream)
        {
            if (info.Flags.HasFlag(PropertyInfo.MultiFlag.EncodedAgainstTickcount))
            {
                log.DebugFormat(
                    "{0}.{1} is encoded against tick count",
                    info.DtName, info.VarName);
                return(stream.ReadVarUInt());
            }
            else
            {
                bool negate     = false;
                byte secondBits = (byte)(info.NumBits - 32);

                if (!info.Flags.HasFlag(PropertyInfo.MultiFlag.Unsigned))
                {
                    --secondBits;

                    if (stream.ReadBool())
                    {
                        negate = true;
                    }
                }

                Preconditions.CheckArgument(info.NumBits >= secondBits);

                ulong a     = stream.ReadBits(32);
                ulong b     = stream.ReadBits(secondBits);
                ulong value = (b << 32) | a;

                if (negate)
                {
                    value = unchecked ((ulong)((long)value * -1));
                }

                return(value);
            }
        }
Example #7
0
        public ulong UnpackInt64(PropertyInfo info, Bitstream stream) {
            if (info.Flags.HasFlag(PropertyInfo.MultiFlag.EncodedAgainstTickcount)) {
                log.DebugFormat(
                    "{0}.{1} is encoded against tick count", 
                    info.DtName, info.VarName);
                return stream.ReadVarUInt();
            } else {
                bool negate = false;
                byte secondBits = (byte) (info.NumBits - 32);

                if (!info.Flags.HasFlag(PropertyInfo.MultiFlag.Unsigned)) {
                    --secondBits;

                    if (stream.ReadBool()) {
                        negate = true;
                    }
                }

                Preconditions.CheckArgument(info.NumBits >= secondBits);

                ulong a = stream.ReadBits(32);
                ulong b = stream.ReadBits(secondBits);
                ulong value = (b << 32) | a;

                if (negate) {
                    value = unchecked((ulong) ((long) value * -1));
                }

                return value;
            }
        }
Example #8
0
        private uint ReadFieldNumber(uint lastField, Bitstream stream) {
            if (stream.ReadBool()) {
                return unchecked(lastField + 1);
            } else {
                uint value = stream.ReadVarUInt();

                if (value == 0x3FFF) {
                    return UInt32.MaxValue;
                } else {
                    return unchecked(lastField + value + 1);
                }
            }
        }