public void WriteVarLong(long value)
        {
            uint        i           = 0;
            CustomInt64 customInt64 = CustomInt64.fromNumber(value);

            if (customInt64.high != 0)
            {
                for (i = 0; i < 4; i++)
                {
                    this._data.WriteByte((byte)(customInt64.low & 127 | 128));
                    customInt64.low >>= 7;
                }
                if ((customInt64.high & 2147483640) != 0)
                {
                    this._data.WriteByte((byte)((customInt64.high << 4 | customInt64.low) & 127 | 128));
                    CustomDataWriter.writeint32(this._data, customInt64.high >> 3);
                }
                else
                {
                    this._data.WriteByte((byte)(customInt64.high << 4 | customInt64.low));
                }
            }
            else
            {
                CustomDataWriter.writeint32(this._data, customInt64.low);
            }
        }
예제 #2
0
        public void WriteVarLong(long value)
        {
            uint i   = 0;
            var  val = CustomInt64.fromNumber(value);

            if (val.high == 0)
            {
                WriteInt32(_data, val.low);
            }
            else
            {
                i = 0;
                while (i < 4)
                {
                    _data.WriteByte((byte)((val.low & 127) | 128));
                    val.low = val.low >> 7;
                    i++;
                }
                if ((val.high & (268435455 << 3)) == 0)
                {
                    _data.WriteByte((byte)((val.high << 4) | val.low));
                }
                else
                {
                    _data.WriteByte((byte)((((val.high << 4) | val.low) & 127) | 128));
                    WriteInt32(_data, val.high >> 3);
                }
            }
        }
        private static CustomInt64 readInt64(IDataReader input)
        {
            CustomInt64 customInt64;
            uint        num          = 0;
            CustomInt64 customInt641 = new CustomInt64();
            int         num1         = 0;

            while (true)
            {
                num = input.ReadByte();
                if (num1 == 28)
                {
                    if (num < 128)
                    {
                        customInt641.low  = customInt641.low | num << (num1 & 31);
                        customInt641.high = num >> 4;
                        customInt64       = customInt641;
                        break;
                    }
                    else
                    {
                        num &= 127;
                        customInt641.low  = customInt641.low | num << (num1 & 31);
                        customInt641.high = num >> 4;
                        num1 = 3;
                        while (true)
                        {
                            num = input.ReadByte();
                            if (num1 < 32)
                            {
                                if (num < 128)
                                {
                                    break;
                                }
                                customInt641.high = customInt641.high | (num & 127) << (num1 & 31);
                            }
                            num1 += 7;
                        }
                        customInt641.high = customInt641.high | num << (num1 & 31);
                        customInt64       = customInt641;
                        break;
                    }
                }
                else if (num < 128)
                {
                    customInt641.low = customInt641.low | num << (num1 & 31);
                    customInt64      = customInt641;
                    break;
                }
                else
                {
                    customInt641.low = customInt641.low | (num & 127) << (num1 & 31);
                    num1            += 7;
                }
            }
            return(customInt64);
        }
예제 #4
0
        private static CustomInt64 readInt64(IDataReader input)
        {
            uint        b      = 0;
            CustomInt64 result = new CustomInt64();
            int         i      = 0;

            while (true)
            {
                b = input.ReadByte();
                if (i == 28)
                {
                    break;
                }
                if (b >= 128)
                {
                    result.low = result.low | (b & 127) << i;
                    i          = i + 7;
                    continue;
                }
                result.low = result.low | b << i;
                return(result);
            }

            if (b >= 128)
            {
                b           = b & 127;
                result.low  = result.low | b << i;
                result.high = b >> 4;
                i           = 3;
                while (true)
                {
                    b = input.ReadByte();
                    if (i < 32)
                    {
                        if (b >= 128)
                        {
                            result.high = (uint)(result.high | (b & 127) << i);
                        }
                        else
                        {
                            break;
                        }
                    }
                    i = i + 7;
                }

                result.high = (uint)(result.high | (b << i));
                return(result);
            }
            result.low  = result.low | b << i;
            result.high = b >> 4;
            return(result);
        }
예제 #5
0
        private CustomInt64 ReadInt64()
        {
            uint b;
            var  result = new CustomInt64();
            var  i      = 0;

            while (true)
            {
                b = ReadByte();
                if (i == 28)
                {
                    break;
                }
                if (b >= 128)
                {
                    result.low = result.low | ((b & 127) << i);
                    i          = i + 7;
                    continue;
                }
                result.low = result.low | (b << i);
                return(result);
            }

            if (b >= 128)
            {
                b           = b & 127;
                result.low  = result.low | (b << i);
                result.high = b >> 4;
                i           = 3;
                while (true)
                {
                    b = ReadByte();
                    if (i < 32)
                    {
                        if (b >= 128)
                        {
                            result.high = result.high | ((b & 127) << i);
                        }
                        else
                        {
                            break;
                        }
                    }
                    i = i + 7;
                }

                result.high = result.high | (b << i);
                return(result);
            }
            result.low  = result.low | (b << i);
            result.high = b >> 4;
            return(result);
        }