Insert a new data class into the ADP. This may only be done during initialization.

Return TypeFunction nameArguments
hzEcodehdbADP::RegisterDataClass(hdbClass*,)

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

Function Logic:

0:START 1:unknown 2:items 3:unknown 4:Return E_ARGUMENT 5:unknown 6:Return E_NOINIT 7:unknown 8:Return hzerr(E_DUPLICATE,Data class %s already registered with id %d,pClass->txtType(),pClass->ClassId()) 9:unknown 10:Return hzerr(E_DUPLICATE,Data type %s already registered. Cannot admit class of this name,pClass->txtType()) 11:pClass->Designation() 12:HDB_CLASS_DESIG_SYS 13:unknown 14:items 15:pClass->strType()==siteindex 16:items 17:pClass->strType()==FinCurrency 18:items 19:pClass->strType()==FinCategory 20:items 21:pClass->strType()==FinAccount 22:items 23:pClass->strType()==FinTransaction 24:items 25:items 26:Return E_BADVALUE

Function body:

hzEcode hdbADP::RegisterDataClass (hdbClass* pClass)
{
   //  Insert a new data class into the ADP. This may only be done during initialization.
   //  
   //  Argument: pClass The data class to be inserted
   _hzfunc("hdbADP::RegisterDataClass") ;
   if (!this)
       hzexit(E_CORRUPT, "No ADP instance") ;
   //  No data class?
   if (!pClass)
       return E_ARGUMENT ;
   //  Unnamed data class?
   if (!pClass->strType())
       return E_NOINIT ;
   //  Data class already has delta id?
   if (pClass->ClassId())
       return hzerr(E_DUPLICATE, "Data class %s already registered with id %d", pClass->txtType(), pClass->ClassId()) ;
   //  Data type already registered?
   if (m_mapDatatypes.Exists(pClass->strType()))
       return hzerr(E_DUPLICATE, "Data type %s already registered. Cannot admit class of this name", pClass->txtType()) ;
   //  Allocate the class id
   switch  (pClass->Designation())
   {
   case HDB_CLASS_DESIG_SYS:   if      (pClass->strType() == "subscriber")     pClass->_setId(HZ_ADP_CLS_SUBSCRIBER) ;
                               else if (pClass->strType() == "siteindex")      pClass->_setId(HZ_ADP_CLS_SITEINDEX) ;
                               else if (pClass->strType() == "FinCurrency")    pClass->_setId(HZ_ADP_CLS_FIN_CRCY) ;
                               else if (pClass->strType() == "FinCategory")    pClass->_setId(HZ_ADP_CLS_FIN_CAT) ;
                               else if (pClass->strType() == "FinAccount")     pClass->_setId(HZ_ADP_CLS_FIN_ACC) ;
                               else if (pClass->strType() == "FinTransaction") pClass->_setId(HZ_ADP_CLS_FIN_TRNS) ;
                               else
                               {
                                   hzerr(E_BADVALUE, "Unrecognized System Class (%s)", pClass->txtType()) ;
                                   return E_BADVALUE ;
                               }
                               break ;
   case HDB_CLASS_DESIG_USR:   pClass->_setId(m_nsqClsUsr++) ;
                               break ;
   case HDB_CLASS_DESIG_CFG:   pClass->_setId(m_nsqClsCfg++) ;
                               break ;
   }
   if (!pClass->ClassId())
       return hzerr(E_NOINIT, "Data class %s did not aquire a delta id", pClass->txtType()) ;
   //  Insert data class into ADP map of datatypes
   m_mapDatatypes.Insert(pClass->strType(), pClass) ;
   m_mapClasses.Insert(pClass->strType(), pClass) ;
   m_mapClsCtxName.Insert(pClass->strType(), pClass->ClassId()) ;  //  m_mapClasses.Count()) ;
   m_mapClsCtxDtId.Insert(pClass->ClassId(), pClass) ;
   threadLog("Inserted %s\n", *pClass->strType()) ;
   return E_OK ;
}