| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hdbMember::Init | (const hdbClass*,const hdbDatatype*,const hzString&,unsigned int,hdbPopCtl,) |
Declared in file: hzDatabase.h
Defined in file : hdbClass.cpp
Function Logic:
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 ;
}