hzEmaddr* pEma ; // Cast pEma = (hzEmaddr*) &m_Data ; *pEma = S ; if (*pEma) { m_eType = eType ; m_eStatus = ATOM_SET ; return E_OK ; }

Return TypeFunction nameArguments
hzEcodehzAtom::SetValue(hdbBasetype,const hzString&,)

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

Function Logic:

0:START 1:hzAtom::Clear 2:!S 3:Return E_OK 4:m_eType 5:m_eType==BASETYPE_DIGEST 6:Md5 hzMD5::IsNull 7:!Md5.IsNull() 8:m_Data hzMD5::Value memcpy m_eStatus 9:Return E_OK 10:m_eType m_eStatus 11:Return E_BADVALUE 12:m_eType==BASETYPE_STRING 13:tmp hzString::_int_addr m_Data hzString::_int_clr m_eType m_eStatus 14:Return E_OK 15:m_eType==BASETYPE_DOMAIN 16:tmp 17:tmp 18:hzString::_int_addr m_Data hzString::_inc_copy m_eType m_eStatus 19:Return E_OK 20:m_eType m_eStatus 21:Return E_BADVALUE 22:m_eType==BASETYPE_EMADDR 23:tmp 24:tmp 25:hzString::_int_addr m_Data hzString::_inc_copy m_eType m_eStatus 26:Return E_OK 27:m_eType m_eStatus 28:Return E_BADVALUE 29:m_eType==BASETYPE_URL 30:tmp 31:tmp 32:hzString::_int_addr m_Data hzString::_inc_copy m_eType m_eStatus 33:Return E_OK 34:m_eType m_eStatus 35:Return E_BADVALUE 36:m_eType==BASETYPE_IPADDR 37:ipa 38:ipa 39:m_eStatus m_Data 40:Return E_OK 41:Return E_BADVALUE 42:m_eType==BASETYPE_XDATE 43:hzXDate::SetDateTime rc 44:rc==E_OK&&xd.AsVal() 45:m_eStatus hzXDate::AsVal m_Data 46:Return E_OK 47:m_eStatus 48:Return E_BADVALUE 49:m_eType==BASETYPE_SDATE 50:hzSDate::SetDate rc 51:rc==E_OK 52:m_eStatus hzSDate::NoDays m_Data 53:Return E_OK 54:m_eStatus 55:Return E_BADVALUE 56:m_eType==BASETYPE_TIME 57:hzTime::SetTime rc 58:rc==E_OK 59:m_eStatus hzTime::NoSecs m_Data 60:Return E_OK 61:m_eStatus 62:Return E_BADVALUE 63:m_eType==BASETYPE_DOUBLE 64:IsDouble(m_Data.m_Double,*S) 65:m_eStatus 66:Return E_OK 67:m_eStatus 68:Return E_BADVALUE 69:m_eType==BASETYPE_BOOL 70:S==TRUE||S==true||S==yes||S==y||S==1 71:m_Data m_eStatus 72:Return E_OK 73:S==FALSE||S==false||S==no||S==n||S==0 74:m_Data m_eStatus 75:Return E_OK 76:m_eStatus 77:Return E_BADVALUE 78:j 79:*j==(char)45 80:items bMinus x 81:IsDigit(*j); 82:x x 83:*j 84:Return E_BADVALUE 85:m_eType 86:BASETYPE_BYTE 87:x>0x7f 88:Return E_BADVALUE 89:m_Data 90:bMinus 91:m_Data

Function body:

hzEcode hzAtom::SetValue (hdbBasetype eType, const hzString& S)
{
   _hzfunc("hzAtom::SetValue(hzString)") ;
   const char* j ;
   uint64_t    x ;
   hzXDate     xd ;
   hzSDate     sd ;
   hzTime      ti ;
   hzIpaddr    ipa ;
   bool        bMinus = false ;
   hzEcode     rc = E_BADVALUE ;
   Clear() ;
   if (!S)
       return E_OK ;
   m_eType = eType ;
   /*
   **  ** HadronZoo string-like types
   **      */
   if (m_eType == BASETYPE_DIGEST)
   {
       hzMD5   Md5 ;
       Md5 = S ;
       if (!Md5.IsNull())
       {
           m_Data.m_pVoid = new uchar[sizeof(hzMD5)] ;
           memcpy(m_Data.m_pVoid, Md5.Value(), sizeof(hzMD5)) ;
           m_eStatus = ATOM_SET ;
           return E_OK ;
       }
       m_eType = BASETYPE_UNDEF ;
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_STRING)
   {
       hzString    tmp ;
       tmp = S ; m_Data.m_uInt32 = tmp._int_addr() ; tmp._int_clr() ;
       m_eType = eType ;
       m_eStatus = ATOM_SET ;
       return E_OK ;
   }
   if (m_eType == BASETYPE_DOMAIN)
   {
       hzDomain    tmp ;
       tmp = S ;
       if (tmp)
       {
           m_Data.m_uInt32 = tmp._int_addr() ;
           tmp._inc_copy() ;
           m_eType = eType ;
           m_eStatus = ATOM_SET ;
           return E_OK ;
       }
       m_eType = BASETYPE_UNDEF ;
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_EMADDR)
   {
       /*
       **  hzEmaddr* pEma ;  // Cast
       **  
       **    pEma = (hzEmaddr*) &m_Data ;
       **    *pEma = S ;
       **    if (*pEma)
       **    {
       **     m_eType = eType ;
       **     m_eStatus = ATOM_SET ;
       **     return E_OK ;
       **    }
       **           */
       hzEmaddr    tmp ;
       tmp = S ;
       if (tmp)
       {
           m_Data.m_uInt32 = tmp._int_addr() ;
           tmp._inc_copy() ;
           m_eType = eType ;
           m_eStatus = ATOM_SET ;
           return E_OK ;
       }
       m_eType = BASETYPE_UNDEF ;
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_URL)
   {
       hzUrl   tmp ;
       tmp = S ;
       if (tmp)
       {
           m_Data.m_uInt32 = tmp._int_addr() ;
           tmp._inc_copy() ;
           m_eType = eType ;
           m_eStatus = ATOM_SET ;
           return E_OK ;
       }
       m_eType = BASETYPE_UNDEF ;
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   /*
   **  ** HadronZoo types without smart pointers
   **      */
   if (m_eType == BASETYPE_IPADDR)
   {
       ipa = *S ;
       if (ipa)
           { m_eStatus = ATOM_SET ; m_Data.m_uInt32 = (uint32_t) ipa ; return E_OK ; }
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_XDATE)
   {
       rc = xd.SetDateTime(S) ;
       if (rc == E_OK && xd.AsVal())
           { m_eStatus = ATOM_SET ; m_Data.m_uInt64 = xd.AsVal() ; return E_OK ; }
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_SDATE)
   {
       rc = sd.SetDate(S) ;
       if (rc == E_OK)
           { m_eStatus = ATOM_SET ; m_Data.m_uInt32 = sd.NoDays() ; return E_OK ; }
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_TIME)
   {
       rc = ti.SetTime(S) ;
       if (rc == E_OK)
           { m_eStatus = ATOM_SET ; m_Data.m_uInt32 = ti.NoSecs() ; return E_OK ; }
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   /*
   **  ** Numeric types (no smart pointers)
   **      */
   if (m_eType == BASETYPE_DOUBLE)
   {
       if (IsDouble(m_Data.m_Double, *S))
           { m_eStatus = ATOM_SET ; return E_OK ; }
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   if (m_eType == BASETYPE_BOOL)
   {
       if (S == "TRUE" || S == "true" || S == "yes" || S == "y" || S == "1")   { m_Data.m_Bool = true ; m_eStatus = ATOM_SET ; return E_OK ; }
       if (S == "FALSE" || S == "false" || S == "no" || S == "n" || S == "0")  { m_Data.m_Bool = false ; m_eStatus = ATOM_SET ; return E_OK ; }
       m_eStatus = ATOM_ERROR ;
       return E_BADVALUE ;
   }
   j = *S ;
   if (*j == CHAR_MINUS)
       { j++ ; bMinus = true ; }
   for (x = 0; IsDigit(*j) ; j++)
       { x *= 10;x += (*j - ''0'');}
   if (*j)
       return E_BADVALUE ;
   switch  (m_eType)
   {
   case BASETYPE_BYTE:     if (x > 0x7f)
                               return E_BADVALUE ;
                           m_Data.m_sByte = x & 0x7f;
                           if (bMinus)
                               m_Data.m_sByte *= -1;
                           break ;
   case BASETYPE_INT16:    if (x > 0x7fff)
                               return E_BADVALUE ;
                           m_Data.m_sInt16 = x & 0x7fff;
                           if (bMinus)
                               m_Data.m_sInt16 *= -1;
                           break ;
   case BASETYPE_INT32:    if (x > 0x7fffffff)
                               return E_BADVALUE ;
                           m_Data.m_sInt32 = x & 0x7fffffff;
                           if (bMinus)
                               m_Data.m_sInt32 *= -1;
                           break ;
   case BASETYPE_INT64:    m_Data.m_sInt64 = x ;
                           if (bMinus)
                               m_Data.m_sInt64 *= -1;
                           break ;
   case BASETYPE_UBYTE:    if (x & 0xffffffffffffff00)
                               return E_BADVALUE ;
                           m_Data.m_uByte = (x & 0xff);
                           break ;
   case BASETYPE_UINT16:   if (x & 0xffffffffffff0000)
                               return E_BADVALUE ;
                           m_Data.m_uInt16 = (x & 0xffff);
                           break ;
   case BASETYPE_UINT32:   if (x & 0xffffffff00000000)
                               return E_BADVALUE ;
                           m_Data.m_uInt32 = (x & 0xffffffff);
                           break ;
   case BASETYPE_UINT64:   m_Data.m_uInt64 = x ;
                           break ;
   }
   m_eStatus = ATOM_SET ;
   return E_OK ;
}