Initialize the data object class member with name and data type

Return TypeFunction nameArguments
hzEcodehdbMember::Init(hdbClass*,hdbDatatype*,hzString&,uint32_t,hdbPopCtl,)

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

Function Logic:

0:START 1:unknown 2:Return E_ARGUMENT 3:unknown 4:Return E_ARGUMENT 5:unknown 6:Return E_ARGUMENT 7:unknown 8:Return E_SETONCE 9:m_pClass m_Name m_pType m_popCtl m_nPosn 10:pType->Basetype() 11:BASETYPE_DIGEST 12:unknown 13:rc m_sizeDatum 14:m_sizeCore

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