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