Convert a serialized integer into a 64-bit unsigned integer.

Return TypeFunction nameArguments
hzEcodeReadSerialUINT64(uint64_t&,hzXbuf::Iter&,)

Declared in file: hzCodec.h
Defined in file : hzCodec.cpp

Function Logic:

0:START 1:nValue val 2:unknown 3:Return E_OK 4:unknown 5:* 6:nValue items 7:Return E_OK 8:*zi&0xF0 9:0x80 10:* 11:val val items val

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 ;
}