Initialize the data object class member with name and data type
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hdbMember::Init | (hdbClass*,hdbDatatype*,hzString&,uint32_t,hdbPopCtl,) |
Declared in file: hzDatabase.h
Defined in file : hdbClass.cpp
Function Logic:
Function body:
hzEcode hdbMember::Init (hdbClass* pClass)hdbDatatype* pType, hzString& name, uint32_t nPosn, hdbPopCtl popCtl,
{
// Initialize the data object class member with name and data type
//
// Arguments: 1) pClass Data class this member belongs to
// 2) type HadronZoo data type
// 3) name Member name
// 4) minPop Minimum number of values the member may have in a real class instance (for repository inserts)
// 5) maxPop Maximum number of values
// 6) nPosn Member position
//
// Returns: E_ARGUMENT If the class, data type, or member name has not been supplied
// E_SETONCE If we are attempting to rename the member
// E_OK If operation was successful
_hzfunc("hdbClass::Member::Init") ;
const hdbEnum* pEnum ; // The actual defined enum (for multi-value enum members only)
hzEcode rc = E_OK ; // Return code
// No member name?
if (!pClass) return E_ARGUMENT ;
if (!pType) return E_ARGUMENT ;
if (!name) return E_ARGUMENT ;
// Member already Init?
if (m_Name)
return E_SETONCE ;
m_pClass = pClass ;
m_Name = name ;
m_pType = pType ;
m_popCtl = popCtl ;
m_nPosn = nPosn ;
// Set value size according to type and expected population
switch (pType->Basetype())
{
case BASETYPE_DIGEST: if (Multiple())
rc = hzerr(E_TYPE, "DIGEST members must be singular") ;
m_sizeCore = m_sizeDatum = 16;
break ;
case BASETYPE_PHONE:
case BASETYPE_XDATE:
case BASETYPE_DOUBLE:
case BASETYPE_UINT64:
case BASETYPE_INT64: m_sizeCore = m_sizeDatum = 8;
break ;
case BASETYPE_BINARY:
case BASETYPE_TXTDOC: if (Multiple())
rc = hzerr(E_TYPE, "BINARY/TXTDOC members must be singular") ;
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_APPDEF: if (Multiple())
m_sizeCore = 8;
else
m_sizeCore = 4;
m_sizeDatum = 4;
break ;
case BASETYPE_TEXT: if (Multiple())
rc = hzerr(E_TYPE, "TEXT members must be singular") ;
m_sizeCore = m_sizeDatum = 4;
break ;
case BASETYPE_UINT16:
case BASETYPE_INT16: if (Multiple())
rc = hzerr(E_TYPE, "UINT16/INT16 cannot be multiple value") ;
m_sizeCore = m_sizeDatum = 2;
break ;
case BASETYPE_ENUM: if (Singular())
{
m_sizeDatum = m_sizeCore = 1;
break ;
}
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 ;
case BASETYPE_BYTE:
case BASETYPE_UBYTE: if (Multiple())
rc = hzerr(E_TYPE, "BYTE/UBYTE cannot be multiple value") ;
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 ;
case BASETYPE_CLASS: m_sizeDatum = m_sizeCore = 8;
break ;
default: rc = hzerr(E_TYPE, "Unhandled Data type %s", Basetype2Txt(pType->Basetype())) ;
break ;
}
return rc ;
}