private CustomUInt64 readUInt64(IDataReader input)
        {
            CustomUInt64 customUInt64;
            uint         num           = 0;
            CustomUInt64 customUInt641 = new CustomUInt64();
            int          num1          = 0;

            while (true)
            {
                num = input.ReadByte();
                if (num1 == 28)
                {
                    if (num < 128)
                    {
                        customUInt641.low  = customUInt641.low | num << (num1 & 31);
                        customUInt641.high = num >> 4;
                        customUInt64       = customUInt641;
                        break;
                    }
                    else
                    {
                        num &= 127;
                        customUInt641.low  = customUInt641.low | num << (num1 & 31);
                        customUInt641.high = num >> 4;
                        num1 = 3;
                        while (true)
                        {
                            num = input.ReadByte();
                            if (num1 < 32)
                            {
                                if (num < 128)
                                {
                                    break;
                                }
                                customUInt641.high = customUInt641.high | (num & 127) << (num1 & 31);
                            }
                            num1 += 7;
                        }
                        customUInt641.high = customUInt641.high | num << (num1 & 31);
                        customUInt64       = customUInt641;
                        break;
                    }
                }
                else if (num < 128)
                {
                    customUInt641.low = customUInt641.low | num << (num1 & 31);
                    customUInt64      = customUInt641;
                    break;
                }
                else
                {
                    customUInt641.low = customUInt641.low | (num & 127) << (num1 & 31);
                    num1 += 7;
                }
            }
            return(customUInt64);
        }
예제 #2
0
        private CustomUInt64 readUInt64(IDataReader input)
        {
            uint b      = 0;
            var  result = new CustomUInt64();
            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 = 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);
        }
예제 #3
0
        private CustomUInt64 ReadUInt64()
        {
            uint b;
            var  result = new CustomUInt64();
            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);
        }
예제 #4
0
        public ulong ReadVarULong()
        {
            uint b      = 0;
            var  result = new CustomUInt64();
            int  i      = 0;

            while (true)
            {
                b = (byte)_ms.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.toNumber());
            }

            if (b >= 128)
            {
                b           = b & 127;
                result.low  = result.low | b << i;
                result.high = b >> 4;
                i           = 3;
                while (true)
                {
                    b = (byte)_ms.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.toNumber());
            }
            result.low  = result.low | b << i;
            result.high = b >> 4;
            return(result.toNumber());
        }