Convert a serialized integer into a 64-bit unsigned integer.
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | ReadSerialUINT64 | (uint64_t&,hzXbuf::Iter&,) |
Declared in file: hzCodec.h
Defined in file : hzCodec.cpp
Function Logic:
Function body:
hzEcode ReadSerialUINT64 (uint64_t& nValue)hzXbuf::Iter& zi,
{
// Category: Number Serialization
//
// Convert a serialized integer into a 64-bit unsigned integer.
//
// Arguments: 1) nValue Restored integer
// 2) zi X-buffer iterator
//
// Returns: E_ARGUMENT If no ptr is supplied
// E_OK Operation successful
uint64_t val ; // Value
uint32_t n ; // Counter
val = nValue = 0;
if (zi.eof())
return E_OK ;
if (!(*zi & 0x80))
{
nValue = *zi & 0x7f;
zi++ ;
return E_OK ;
}
switch (*zi & 0xF0)
{
case 0x80:// 1000 xxxx: 2 byte value
val = *zi & 0x0f;
val <<&eq; 8; zi++ ; val += *zi ;
break ;
case 0x90:// 1001 xxxx: 3 byte value
val = *zi & 0x0f;for(n = 2; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xA0:// 1010 xxxx: 4 byte value
val = *zi & 0x0f;for(n = 3; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xB0:// 1011 xxxx: 5 byte value
val = *zi & 0x0f;for(n = 4; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xC0:// 1100 xxxx: 6 byte value
val = *zi & 0x0f;for(n = 5; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xD0:// 1101 xxxx: 7 byte value
val = *zi & 0x0f;for(n = 6; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xE0:// 1110 xxxx: 8 byte value
val = *zi & 0x0f;for(n = 7; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
case 0xF0:// 1111 xxxx: Value in next 8 bytes
zi++ ; val = *zi ; for (n = 7; n ; n--) { val <<&eq; 8; zi++ ; val += *zi ; }
break ;
}
nValue = val ;
return E_OK ;
}