Convert a serialized integer into a 64-bit unsigned integer.
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | ReadSerialSINT64 | (int64_t&,uint32_t&,unsigned char*,) |
Declared in file: hzCodec.h
Defined in file : hzCodec.cpp
Function Logic:
Function body:
hzEcode ReadSerialSINT64 (int64_t& nValue)uint32_t& nLen, unsigned char* ptr,
{
// Category: Number Serialization
//
// Convert a serialized integer into a 64-bit unsigned integer.
//
// Arguments: 1) nValue Indicated length or value
// 2) nLen The size of the indicator itself
// 3) ptr Pointer into a uchar buffer (start of indicator)
//
// Returns: E_ARGUMENT If no ptr is supplied
// E_OK Operation successful
uint64_t inc ; // Increament value
bool bNeg ; // Set if negative
if (!ptr)
return hzerr(E_ARGUMENT, "No length indicator supplied") ;
if (*ptr & 0x80)
{
nLen = (*ptr & 0x70)>>4;
bNeg = *ptr & 0x0c;
nValue = *ptr & 0x03;
switch (nLen)
{
case 0: nValue <<&eq; 8; nValue += ptr[1]; break ;
case 1: nValue <<&eq; 16; _endian_import2(inc, ptr+1); nValue += inc ; break ;
case 2: nValue <<&eq; 24; _endian_import3(inc, ptr+1); nValue += inc ; break ;
case 3: nValue <<&eq; 32; _endian_import4(inc, ptr+1); nValue += inc ; break ;
case 4: nValue <<&eq; 40; _endian_import5(inc, ptr+1); nValue += inc ; break ;
case 5: nValue <<&eq; 48; _endian_import6(inc, ptr+1); nValue += inc ; break ;
case 6: nValue <<&eq; 56; _endian_import7(inc, ptr+1); nValue += inc ; break ;
default:
_endian_import8(inc, ptr+1);
nValue = (int64_t) inc ;
break ;
}
if (bNeg && nLen < 7)
nValue *= -1;
}
else
{
nLen = 1;
nValue = *ptr & 0x7f;
}
return E_OK ;
}