Return TypeFunction nameArguments
hzEcodehdbObject::ImportEDO(const hzChain&,)

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

Function Logic:

0:START 1:!m_pClass 2:hzexit 3:!m_pRoot 4:_obj_data::GetInstance m_pRoot 5:hdbClass::CoreLen pLitmus zi ReadSerialUINT32 rc 6:rc!=E_OK 7:Return hzerr(rc,Could not process EDO length) 8:hdbClass::CoreLen memset hdbClass::MbrCount memset zend zend ReadSerialUINT32 rc 9:rc!=E_OK 10:Return hzerr(rc,Could not process EDO Object Id) 11:bitMask nC mbrNo 12:mbrNoMbrCount(); 13:*zi&bitMask 14:items pLitmus 15:bitMask 16:bitMask==0 17:bitMask items 18:bitMask<128 19:items mbrNo 20:rc==E_OK&&mbrNoMbrCount(); 21:hdbClass::GetMember pMbr 22:pLitmus[mbrNo]==0 23:pMbr->Basetype()==BASETYPE_BOOL||pMbr->Basetype()==BASETYPE_TBOOL 24:hdbMember::OsetStd pMCS 25:pMbr->Basetype()==BASETYPE_ENUM 26:pMbr->Singular() 27:pMCS 28:items 29:pEnum->Count()<31 30:pMbr->Basetype()==BASETYPE_BINARY||pMbr->Basetype()==BASETYPE_TXTDOC 31:!zi.eof()&&nC<4; 32:pMCS 33:hdbMember::OsetStd pMCS nC 34:!zi.eof()&&nCSizeDatum(); 35:pMCS 36:nCSizeDatum() 37:hdbMember::txtName 38:pMbr->Basetype()==BASETYPE_STRING||pMbr->Basetype()==BASETYPE_APPDEF 39:pStr 40:pStr 41:hzString::_inc_copy 42:pMbr->Basetype()==BASETYPE_DOMAIN 43:pDom 44:*pDom 45:hzDomain::_inc_copy 46:pMbr->Basetype()==BASETYPE_EMADDR 47:pEma 48:*pEma 49:hzEmaddr::_inc_copy 50:pMbr->Basetype()==BASETYPE_URL 51:pUrl 52:*pUrl 53:hzUrl::_inc_copy 54:zi!=zend 55:rc Z zi 56:!zi.eof()&&nC<=nLenEDO; 57:Return rc

Function body:

hzEcode hdbObject::ImportEDO (const hzChain& Z)
{
   _hzfunc("hdbObject::ImportEDO") ;
   const hdbMember*    pMbr ;
   hzMD5               digest ;
   chIter              zi ;
   chIter              zend ;
   _atomval            av ;
   const hdbEnum*      pEnum ;
   uchar*              pLitmus ;
   uchar*              pMCS ;
   hzString*           pStr ;
   hzDomain*           pDom ;
   hzEmaddr*           pEma ;
   hzUrl*              pUrl ;
   hzString            S ;
   uint32_t            mbrNo ;
   uint32_t            nLenEDO ;
   uint32_t            nObjId ;
   uint32_t            nC ;
   uint32_t            bitMask ;
   hzEcode             rc ;
   if (!m_pClass)
       hzexit(E_NOINIT, "Object has no class") ;
   if (!m_pRoot)
       m_pRoot = _obj_data::GetInstance(m_pClass) ;
   pLitmus = m_pRoot->m_Core + m_pClass->CoreLen() ;
   zi = Z ;
   rc = ReadSerialUINT32(nLenEDO, zi) ;
   if (rc != E_OK)
       return hzerr(rc, "Could not process EDO length") ;
   memset(m_pRoot->m_Core, 0,m_pClass->CoreLen()) ;
   memset(pLitmus, 0,m_pClass->MbrCount()) ;
   zend = zi ;
   zend += nLenEDO ;
   rc = ReadSerialUINT32(nObjId, zi) ;
   if (rc != E_OK)
       return hzerr(rc, "Could not process EDO Object Id") ;
   bitMask = 128;
   for (mbrNo = nC = 0; mbrNo < m_pClass->MbrCount() ; mbrNo++)
   {
       if (*zi & bitMask)
           { nC++ ; pLitmus[mbrNo] = LITMUS_SET ; }
       bitMask /= 2;
       if (bitMask == 0)
           { bitMask = 128;zi++; }
   }
   if (bitMask < 128)
       zi++ ;
   for (mbrNo = 0; rc == E_OK && mbrNo < m_pClass->MbrCount() ; mbrNo++)
   {
       pMbr = m_pClass->GetMember(mbrNo) ;
       if (pLitmus[mbrNo] == 0)
           continue ;
       if (pMbr->Basetype() == BASETYPE_BOOL || pMbr->Basetype() == BASETYPE_TBOOL)
           continue ;
       pMCS = m_pRoot->m_Core + pMbr->OsetStd() ;
       if (pMbr->Basetype() == BASETYPE_ENUM)
       {
           if (pMbr->Singular())
           {
               pMCS[0]= *zi++ ;
               continue ;
           }
           pEnum = dynamic_cast<const hdbEnum*>(pMbr->Datatype()) ;
           if (pEnum->Count() < 31)
           {
           }
           continue ;
       }
       if (pMbr->Basetype() == BASETYPE_BINARY || pMbr->Basetype() == BASETYPE_TXTDOC)
       {
           for (nC = 0; !zi.eof() && nC < 4; nC++, zi++)
           {
               pMCS[nC] = *zi ;
           }
           continue ;
       }
       pMCS = m_pRoot->m_Core + pMbr->OsetStd() ;
       for (nC = 0; !zi.eof() && nC < pMbr->SizeDatum() ; nC++, zi++)
       {
           pMCS[nC] = *zi ;
       }
       if (nC < pMbr->SizeDatum())
           threadLog("Incomplete read of member %s\n", pMbr->txtName()) ;
       if (pMbr->Basetype() == BASETYPE_STRING || pMbr->Basetype() == BASETYPE_APPDEF)
       {
           pStr = (hzString*) pMCS ;
           if (pStr)
               pStr->_inc_copy() ;
       }
       if (pMbr->Basetype() == BASETYPE_DOMAIN)
       {
           pDom = (hzDomain*) pMCS ;
           if (*pDom)
               pDom->_inc_copy() ;
       }
       if (pMbr->Basetype() == BASETYPE_EMADDR)
       {
           pEma = (hzEmaddr*) pMCS ;
           if (*pEma)
               pEma->_inc_copy() ;
       }
       if (pMbr->Basetype() == BASETYPE_URL)
       {
           pUrl = (hzUrl*) pMCS ;
           if (*pUrl)
               pUrl->_inc_copy() ;
       }
   }
   if (zi != zend)
   {
       rc = hzerr(E_CORRUPT, "Object Id %u: Not at EDO end\n", nObjId) ;
       for (zi = Z, nC = 0; !zi.eof() && nC <&eq; nLenEDO ; nC++, zi++)
       {
           threadLog("%u: char is %02x\n", nC, (uchar) *zi) ;
       }
   }
   return rc ;
}