Return TypeFunction nameArguments
hzEcodehdbMember::Init(const hdbClass*,const hdbDatatype*,const hzString&,unsigned int,hdbPopCtl,)

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

Function Logic:

0:START 1:!pClass 2:Return E_ARGUMENT 3:!pType 4:Return E_ARGUMENT 5:!name 6:Return E_ARGUMENT 7:m_Name 8:Return E_SETONCE 9:m_pClass m_Name m_pType m_popCtl m_nPosn hdbMember::Singular 10:Singular() 11:pType->Basetype() 12:BASETYPE_DIGEST 13:m_sizeDatum

Function body:

hzEcode hdbMember::Init (const hdbClass* pClass, const hdbDatatype* pType, const hzString& name, unsigned int nPosn, hdbPopCtl popCtl)
{
   _hzfunc("hdbClass::Member::Init") ;
   const hdbEnum*  pEnum ;
   hzEcode         rc = E_OK ;
   if (!pClass)    return E_ARGUMENT ;
   if (!pType)     return E_ARGUMENT ;
   if (!name)      return E_ARGUMENT ;
   if (m_Name)
       return E_SETONCE ;
   m_pClass = pClass ;
   m_Name = name ;
   m_pType = pType ;
   m_popCtl = popCtl ;
   m_nPosn = nPosn ;
   if (Singular())
   {
       switch  (pType->Basetype())
       {
       case BASETYPE_DIGEST:   m_sizeDatum = 16;
                               break ;
       case BASETYPE_PHONE:
       case BASETYPE_XDATE:
       case BASETYPE_DOUBLE:
       case BASETYPE_UINT64:
       case BASETYPE_INT64:    m_sizeDatum = 8;
                               break ;
       case BASETYPE_BINARY:
       case BASETYPE_TXTDOC:   m_sizeCore = m_sizeDatum = 4;
                               m_sizeAux = 8;
                               break ;
       case BASETYPE_UINT32:
       case BASETYPE_INT32:
       case BASETYPE_TIME:
       case BASETYPE_SDATE:
       case BASETYPE_STRING:
       case BASETYPE_DOMAIN:
       case BASETYPE_EMADDR:
       case BASETYPE_URL:
       case BASETYPE_IPADDR:
       case BASETYPE_TEXT:
       case BASETYPE_APPDEF:   m_sizeDatum = 4;
                               break ;
       case BASETYPE_UINT16:
       case BASETYPE_INT16:    if (Multiple())
                                   rc = hzerr(E_TYPE, "UINT16/INT16 cannot be multiple value") ;
                               m_sizeDatum = 2;
                               break ;
       case BASETYPE_ENUM:     m_sizeDatum = m_sizeCore = 1;
                               break ;
       case BASETYPE_BYTE:
       case BASETYPE_UBYTE:    m_sizeDatum = 1;
                               break ;
       case BASETYPE_BOOL:
       case BASETYPE_TBOOL:    m_sizeDatum = 0;
                               if (Multiple())
                                   rc = hzerr(E_TYPE, "BOOL/TBOOL cannot be multiple value") ;
                               break ;
       default:    rc = hzerr(E_TYPE, "Data type %s cannot be singular", Basetype2Txt(pType->Basetype())) ;
                   break ;
       }
   }
   else
   {
       switch  (pType->Basetype())
       {
       case BASETYPE_CLASS:    m_sizeDatum = m_sizeCore = 8;
                               break ;
       case BASETYPE_ENUM:     pEnum = dynamic_cast<const hdbEnum*>(m_pType) ;
                               if (!pEnum)
                                   return hzerr(E_TYPE, "ENUM type but no enum found") ;
                               m_sizeCore = (pEnum->Count()/8);
                               m_sizeCore += pEnum->Count()%8? 1: 0;
                               m_sizeDatum = m_sizeCore ;
                               break ;
       default:    rc = hzerr(E_TYPE, "Data type %s cannot be multiple value", Basetype2Txt(pType->Basetype())) ;
                   break ;
       }
   }
   if (rc != E_OK)
       return rc ;
   if (Singular())
       m_sizeCore = m_sizeDatum ;
   else
       m_sizeCore = 8;
   return E_OK ;
}