xtemplateserializer.cpp
来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,995 行 · 第 1/4 页
CPP
1,995 行
{ if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); int itemNumber = 0; RefHash2KeysTableOfEnumerator<SchemaAttDef> e(objToStore, false, objToStore->getMemoryManager()); while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XMLCh* key1; int key2; e.nextElementKey((void*&)key1, key2); SchemaAttDef* data = objToStore->get(key1, key2); serEng<<data; } }}void XTemplateSerializer::loadObject(RefHash2KeysTableOf<SchemaAttDef>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHash2KeysTableOf<SchemaAttDef>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { SchemaAttDef* data; serEng>>data; XMLCh* key1 = data->getAttName()->getLocalPart(); int key2 = data->getAttName()->getURI(); //key2==data->getId() (*objToLoad)->put((void*)key1, key2, data); } }}void XTemplateSerializer::storeObject(RefHash2KeysTableOf<ElemVector>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); int itemNumber = 0; RefHash2KeysTableOfEnumerator<ElemVector> e(objToStore, false, objToStore->getMemoryManager()); while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XMLCh* key1; int key2; e.nextElementKey((void*&)key1, key2); serEng.writeString(key1); serEng<<key2; ElemVector* data = objToStore->get(key1, key2); storeObject(data, serEng); } }}void XTemplateSerializer::loadObject(RefHash2KeysTableOf<ElemVector>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHash2KeysTableOf<ElemVector>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { XMLCh* key1; serEng.readString(key1); int key2; serEng>>key2; ElemVector* data = 0; //don't call destructor loadObject(&data, 8, false, serEng); /*** * * There must be one element in the vector whose * susbititutionGroupElem matches the (key1,key2) * ***/ // bool FOUND=false; int vectorSize = data->size(); for ( int i = 0; i < vectorSize; i++) { SchemaElementDecl*& elem = data->elementAt(i); SchemaElementDecl* subElem = elem->getSubstitutionGroupElem(); XMLCh* elemName = subElem->getBaseName(); int uri = subElem->getURI(); if (XMLString::equals(elemName, key1) && (uri == key2) ) { //release the temp serEng.getMemoryManager()->deallocate(key1); key1 = elemName; //FOUND=true; break; } } /*** * if (!FOUND) * { * throw exception * } ***/ (*objToLoad)->put((void*)key1, key2, data); } }}/********************************************************** * * RefHash3KeysIdPool * * SchemaElementDecl * ***********************************************************/void XTemplateSerializer::storeObject(RefHash3KeysIdPool<SchemaElementDecl>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); int itemNumber = 0; RefHash3KeysIdPoolEnumerator<SchemaElementDecl> e(objToStore, false, objToStore->getMemoryManager()); XMLCh* key1; int key2; int key3; while (e.hasMoreKeys()) { e.nextElementKey((void*&)key1, key2, key3); itemNumber++; } serEng<<itemNumber; e.resetKey(); while (e.hasMoreKeys()) { e.nextElementKey((void*&)key1, key2, key3); SchemaElementDecl* data = objToStore->getByKey(key1, key2, key3); serEng<<data; } }}void XTemplateSerializer::loadObject(RefHash3KeysIdPool<SchemaElementDecl>** objToLoad , int , bool toAdopt , int initSize2 , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHash3KeysIdPool<SchemaElementDecl>( hashModulus , toAdopt , initSize2 , serEng.getMemoryManager()); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { SchemaElementDecl* elemDecl; serEng>>elemDecl; (*objToLoad)->put(elemDecl->getBaseName() , elemDecl->getURI() , elemDecl->getEnclosingScope() , elemDecl); } }}/********************************************************** * * NameIdPool * no NameIdPool::nextElementKey() * * DTDElementDecl * DTDEntityDecl * XMLNotationDecl * ***********************************************************/void XTemplateSerializer::storeObject(NameIdPool<DTDElementDecl>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { int itemNumber = 0; NameIdPoolEnumerator<DTDElementDecl> e(objToStore, objToStore->getMemoryManager()); while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { DTDElementDecl& data = e.nextElement(); data.serialize(serEng); } }}void XTemplateSerializer::loadObject(NameIdPool<DTDElementDecl>** objToLoad , int initSize , int initSize2 , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { if (!*objToLoad) { if (initSize < 0) initSize = 16; *objToLoad = new (serEng.getMemoryManager()) NameIdPool<DTDElementDecl>( initSize , initSize2 , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { DTDElementDecl* data = new (serEng.getMemoryManager()) DTDElementDecl(serEng.getMemoryManager()); data->serialize(serEng); (*objToLoad)->put(data); } }}void XTemplateSerializer::storeObject(NameIdPool<DTDEntityDecl>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { int itemNumber = 0; NameIdPoolEnumerator<DTDEntityDecl> e(objToStore, objToStore->getMemoryManager()); while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { DTDEntityDecl& data = e.nextElement(); data.serialize(serEng); } }}void XTemplateSerializer::loadObject(NameIdPool<DTDEntityDecl>** objToLoad , int initSize , int initSize2 , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { if (!*objToLoad) { if (initSize < 0) initSize = 16; *objToLoad = new (serEng.getMemoryManager()) NameIdPool<DTDEntityDecl>( initSize , initSize2 , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { DTDEntityDecl* data = new (serEng.getMemoryManager()) DTDEntityDecl(serEng.getMemoryManager()); data->serialize(serEng); (*objToLoad)->put(data); } }}void XTemplateSerializer::storeObject(NameIdPool<XMLNotationDecl>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { int itemNumber = 0; NameIdPoolEnumerator<XMLNotationDecl> e(objToStore, objToStore->getMemoryManager()); while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XMLNotationDecl& data = e.nextElement(); data.serialize(serEng); } }}void XTemplateSerializer::loadObject(NameIdPool<XMLNotationDecl>** objToLoad , int initSize , int initSize2 , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { if (!*objToLoad) { if (initSize < 0) initSize = 16; *objToLoad = new (serEng.getMemoryManager()) NameIdPool<XMLNotationDecl>( initSize , initSize2 , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { XMLNotationDecl* data = new (serEng.getMemoryManager()) XMLNotationDecl(serEng.getMemoryManager()); data->serialize(serEng); (*objToLoad)->put(data); } }}XERCES_CPP_NAMESPACE_END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?