Convert a serialized integer into a 32-bit signed integer.

Return TypeFunction nameArguments
hzEcodeReadSerialSINT32(int32_t&,hzChain::Iter&,)

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

Function Logic:

0:START 1:* bNeg 2:unknown 3:* 4:val items 5:*zi&0x30 6:0x00 7:* 8:val items val val

Function body:

hzEcode ReadSerialSINT32 (int32_t& nValue)hzChain::Iter& zi, 
{
   //  Category: Number Serialization
   //  
   //  Convert a serialized integer into a 32-bit signed integer.
   //  
   //  Arguments: 1) nValue Indicated length or value
   //     2) zi  Chain iterator (start of indicator)
   //  
   //  Returns: E_ARGUMENT If no ptr is supplied
   //     E_OK  Operation successful
   uint32_t    val ;   //  Value
   bool        bNeg ;  //  Negative
   bNeg = *zi & 0x40;
   if (!(*zi & 0x80))
   {
       val = *zi & 0x3f;
       zi++ ;
   }
   else
   {
       switch  (*zi & 0x30)
       {
       case 0x00://  1n00xxxx: 2 byte value
                   val = *zi & 0x0f;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   break ;
       case 0x10://  1n01xxxx: 3 byte value
                   val = *zi & 0x0f;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   break ;
       case 0x20://  1n10xxxx: 4 byte value
                   val = *zi & 0x0f;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   break ;
       case 0x30://  1n11xxxx: Next 4 bytes are the value
                   zi++ ;  val = (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   zi++ ;  val <<&eq; 8; val+= (uchar) *zi ;
                   break ;
       }
   }
   nValue = bNeg ? -val : val ;
   return E_OK ;
}