Return TypeFunction nameArguments
hzEcodehzAtom::SetNumber(const char*,)

Declared in file: hzDatabase.h
Defined in file : hzAtom.cpp

Function Logic:

0:START 1:hzAtom::Clear i 2:!i 3:Return E_NODATA 4:*i==(char)45 5:bNeg items 6:*i==(char)43 7:items 8:i[0]=='0'&&(i[1]=='x'||i[1]=='X') 9:IsHex(*i); 10:valA 11:*i>='0'&&*i<='9' 12:valA 13:*i>='A'&&*i<='F' 14:valA valA 15:*i>='a'&&*i<='f' 16:valA valA 17:*i 18:m_eType 19:Return E_FORMAT 20:!nBytes||nBytes>16 21:m_eType 22:Return E_FORMAT 23:nBytes>8 24:m_eType m_Data 25:nBytes>4 26:m_eType m_Data 27:nBytes>2 28:m_eType m_Data 29:m_eType m_Data 30:Return E_OK 31:IsDigit(*i); 32:valA 33:*i>='0'&&*i<='9' 34:valA 35:!nDigits 36:Return BASETYPE_UNDEF 37:*i==(char)46 38:items nDigits 39:IsDigit(*i); 40:valD 41:*i>='0'&&*i<='9' 42:valB 43:!nDigits 44:Return BASETYPE_UNDEF 45:nBytes; 46:valD 47:valD 48:*i=='e' 49:items 50:*i==(char)45||*i==(char)43 51:items items nDigits 52:IsDigit(*i); 53:valE 54:*i>='0'&&*i<='9' 55:valE 56:!nDigits 57:Return BASETYPE_UNDEF 58:m_Data m_eType 59:Return E_OK 60:nDigits>8 61:bNeg 62:m_Data m_eType 63:m_Data m_eType 64:nDigits>4 65:bNeg 66:m_Data m_eType 67:m_Data m_eType 68:nDigits>2 69:bNeg 70:m_Data m_eType 71:m_Data m_eType 72:bNeg 73:m_Data m_eType 74:m_Data m_eType 75:m_eStatus 76:Return E_OK

Function body:

hzEcode hzAtom::SetNumber (const char* s)
{
   _hzfunc("hzAtom::SetNumber") ;
   const char* i ;
   uint64_t    valA ;
   double      valD ;
   uint32_t    valB ;
   uint32_t    valE ;
   uint32_t    nDigits = 0;
   int32_t     nBytes = 0;
   bool        bNeg = false ;
   Clear() ;
   i = s ;
   if (!i)
       return E_NODATA ;
   if (*i == CHAR_MINUS)
       { bNeg = true ; i++ ; }
   else if (*i == CHAR_PLUS)
       i++ ;
   else if (i[0]== ''0''&&(i[1]== ''x''||i[1]== ''X''))
   {
       for (i += 2; IsHex(*i) ; nBytes++, i++)
       {
           valA *= 16;
           if (*i >&eq; ''0''&&*i <&eq; ''9''){valA += (*i - ''0'');continue ; }
           if (*i >&eq; ''A''&&*i <&eq; ''F''){valA += 10;valA += (*i - ''A'');continue ; }
           if (*i >&eq; ''a''&&*i <&eq; ''f''){valA += 10;valA += (*i - ''a'');continue ; }
           break ;
       }
       if (*i)
           { m_eType = BASETYPE_UNDEF ; return E_FORMAT ; }
       if (!nBytes || nBytes > 16)
           { m_eType = BASETYPE_UNDEF ; return E_FORMAT ; }
       if      (nBytes > 8){ m_eType = BASETYPE_UINT64 ; m_Data.m_uInt64 = valA ; }
       else if (nBytes > 4){ m_eType = BASETYPE_UINT32 ; m_Data.m_uInt32 = valA & 0xffffffff;}
       else if (nBytes > 2){ m_eType = BASETYPE_UINT16 ; m_Data.m_uInt16 = valA & 0xffff;}
       else
           { m_eType = BASETYPE_UBYTE ; m_Data.m_uByte = valA & 0xff;}
       return E_OK ;
   }
   for (nDigits = 0; IsDigit(*i) ; nBytes++, nDigits++, i++)
   {
       valA *= 10;
       if (*i >&eq; ''0''&&*i <&eq; ''9'')
           { valA += (*i - ''0'');continue ; }
       break ;
   }
   if (!nDigits)
       return BASETYPE_UNDEF ;
   if (*i == CHAR_PERIOD)
   {
       i++ ;
       for (nDigits = 0; IsDigit(*i) ; nBytes++, nDigits++, i++)
       {
           valD *= 10.0;
           if (*i >&eq; ''0''&&*i <&eq; ''9'')
               { valB += (*i - ''0'');continue ; }
           break ;
       }
       if (!nDigits)
           return BASETYPE_UNDEF ;
       for (; nBytes ; nBytes--)
           valD /= 10.0;
       valD += (double) valA ;
       if (*i == ''e'')
       {
           i++ ;
           if (*i == CHAR_MINUS || *i == CHAR_PLUS)
               { nBytes++ ; i++ ; }
           for (nDigits = 0; IsDigit(*i) ; nBytes++, nDigits++, i++)
           {
               valE *= 10;
               if (*i >&eq; ''0''&&*i <&eq; ''9'')
                   { valE += (*i - ''0'');continue ; }
               break ;
           }
           if (!nDigits)
               return BASETYPE_UNDEF ;
       }
       m_Data.m_Double = valD ;
       m_eType = BASETYPE_DOUBLE ;
       return E_OK ;
   }
   if (nDigits > 8)
   {
       if (bNeg)
           { m_Data.m_sInt64 = valA ; m_eType = BASETYPE_INT64 ; }
       else
           { m_Data.m_uInt64 = valA ; m_eType = BASETYPE_UINT64 ; }
   }
   else if (nDigits > 4)
   {
       if (bNeg)
           { m_Data.m_sInt32 = valA ; m_eType = BASETYPE_INT32 ; }
       else
           { m_Data.m_uInt32 = valA ; m_eType = BASETYPE_UINT32 ; }
   }
   else if (nDigits > 2)
   {
       if (bNeg)
           { m_Data.m_sInt16 = valA ; m_eType = BASETYPE_INT16 ; }
       else
           { m_Data.m_uInt16 = valA ; m_eType = BASETYPE_UINT16 ; }
   }
   else
   {
       if (bNeg)
           { m_Data.m_sByte = valA ; m_eType = BASETYPE_BYTE ; }
       else
           { m_Data.m_uByte = valA ; m_eType = BASETYPE_UBYTE ; }
   }
   m_eStatus = ATOM_SET ;
   return E_OK ;
}