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 ; }