| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hdbObject::ImportEDO | (const hzChain&,) |
Declared in file: hzDatabase.h
Defined in file : hdbObject.cpp
Function Logic:
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 ;
}