xtemplateserializer.cpp
来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 1,995 行 · 第 1/4 页
CPP
1,995 行
int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { ComplexTypeInfo* data; serEng>>data; (*objToLoad)->put((void*)data->getTypeName(), data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<XercesGroupInfo>* const objToStore , XSerializeEngine& serEng) { if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<XercesGroupInfo> e(objToStore, false, objToStore->getMemoryManager()); int itemNumber = 0; while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XMLCh* key = (XMLCh*) e.nextElementKey(); unsigned int id = serEng.getStringPool()->getId(key); // key = StringPool->getValueForId(XercesGroupInfo::getNameSpaceId()) // + chComma // + StringPool->getValueForId(XercesGroupInfo::getNameId()) // // and the key is guranteed in the StringPool // // // if (id == 0) // { // throw exception // } // serEng<<id; XercesGroupInfo* data = objToStore->get(key); serEng<<data; } }}void XTemplateSerializer::loadObject(RefHashTableOf<XercesGroupInfo>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<XercesGroupInfo>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { unsigned int id; serEng>>id; XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(id); XercesGroupInfo* data; serEng>>data; (*objToLoad)->put((void*)key, data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<XercesAttGroupInfo>* const objToStore , XSerializeEngine& serEng) { if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<XercesAttGroupInfo> e(objToStore, false, objToStore->getMemoryManager()); int itemNumber = 0; while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XercesAttGroupInfo* data = objToStore->get(e.nextElementKey()); serEng<<data; } }}void XTemplateSerializer::loadObject(RefHashTableOf<XercesAttGroupInfo>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<XercesAttGroupInfo>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { XercesAttGroupInfo* data; serEng>>data; XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(data->getNameId()); (*objToLoad)->put((void*)key, data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<XMLRefInfo>* const objToStore , XSerializeEngine& serEng) { if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<XMLRefInfo> e(objToStore, false, objToStore->getMemoryManager()); int itemNumber = 0; while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { XMLCh* key = (XMLCh*) e.nextElementKey(); serEng.writeString(key); XMLRefInfo* data = objToStore->get(key); serEng<<data; } }}void XTemplateSerializer::loadObject(RefHashTableOf<XMLRefInfo>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<XMLRefInfo>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { XMLCh* key; serEng.readString(key); XMLRefInfo* data; serEng>>data; (*objToLoad)->put((void*)key, data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<DatatypeValidator>* const objToStore , XSerializeEngine& serEng) { if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<DatatypeValidator> e(objToStore, false, objToStore->getMemoryManager()); int itemNumber = 0; while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { /*** * to do: verify valid id * * XMLCh* key = (XMLCh*) e.nextElementKey(); * unsigned int id = serEng.getStringPool()->getId(key); * if (id == 0) * throw exception ***/ DatatypeValidator* data = objToStore->get(e.nextElementKey()); DatatypeValidator::storeDV(serEng, data); } }}void XTemplateSerializer::loadObject(RefHashTableOf<DatatypeValidator>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<DatatypeValidator>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { DatatypeValidator* data; data = DatatypeValidator::loadDV(serEng); /*** * restore the key ***/ XMLCh* typeUri = (XMLCh*) data->getTypeUri(); XMLCh* typeLocal = (XMLCh*) data->getTypeLocalName(); unsigned int uriLen = XMLString::stringLen(typeUri); unsigned int localLen = XMLString::stringLen(typeLocal); XMLCh* typeKey = (XMLCh*) serEng.getMemoryManager()->allocate ( (uriLen + localLen + 2) * sizeof(XMLCh) ); // "typeuri,typeLocal" XMLString::moveChars(typeKey, typeUri, uriLen+1); typeKey[uriLen] = chComma; XMLString::moveChars(&typeKey[uriLen+1], typeLocal, localLen+1); typeKey[uriLen + localLen + 1] = chNull; ArrayJanitor<XMLCh> janName(typeKey, serEng.getMemoryManager()); /* * get the string from string pool * * to do: ***/ unsigned int id = serEng.getStringPool()->getId(typeKey); XMLCh* refKey = (XMLCh*) serEng.getStringPool()->getValueForId(id); (*objToLoad)->put((void*)refKey, data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<Grammar>* const objToStore , XSerializeEngine& serEng) { if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<Grammar> e(objToStore, false, objToStore->getMemoryManager()); int itemNumber = 0; while (e.hasMoreElements()) { e.nextElement(); itemNumber++; } serEng<<itemNumber; e.Reset(); while (e.hasMoreElements()) { Grammar* data = objToStore->get(e.nextElementKey()); Grammar::storeGrammar(serEng, data); } }}void XTemplateSerializer::loadObject(RefHashTableOf<Grammar>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<Grammar>( hashModulus , toAdopt , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { Grammar* data; data = Grammar::loadGrammar(serEng); XMLCh* key = (XMLCh*) data->getGrammarDescription()->getGrammarKey(); (*objToLoad)->put((void*)key, data); } }}void XTemplateSerializer::storeObject(RefHashTableOf<XSAnnotation>* const objToStore , XSerializeEngine& serEng){ if (serEng.needToStoreObject(objToStore)) { serEng<<objToStore->getHashModulus(); RefHashTableOfEnumerator<XSAnnotation> e(objToStore, false, objToStore->getMemoryManager()); ValueVectorOf<XSerializeEngine::XSerializedObjectId_t> ids(16, serEng.getMemoryManager()); ValueVectorOf<void*> keys(16, serEng.getMemoryManager()); while (e.hasMoreElements()) { void* key = e.nextElementKey(); XSerializeEngine::XSerializedObjectId_t keyId = serEng.lookupStorePool(key); if (keyId) { ids.addElement(keyId); keys.addElement(key); } } int itemNumber = ids.size(); serEng<<itemNumber; for (int i=0; i<itemNumber; i++) { XSerializeEngine::XSerializedObjectId_t keyId = ids.elementAt(i); XSAnnotation* data = objToStore->get(keys.elementAt(i)); serEng<<keyId; serEng<<data; } }}void XTemplateSerializer::loadObject(RefHashTableOf<XSAnnotation>** objToLoad , int , bool toAdopt , XSerializeEngine& serEng){ if (serEng.needToLoadObject((void**)objToLoad)) { unsigned int hashModulus; serEng>>hashModulus; if (!*objToLoad) { *objToLoad = new (serEng.getMemoryManager()) RefHashTableOf<XSAnnotation>( hashModulus , toAdopt , new (serEng.getMemoryManager()) HashPtr() , serEng.getMemoryManager() ); } serEng.registerObject(*objToLoad); int itemNumber = 0; serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { XSerializeEngine::XSerializedObjectId_t keyId = 0; serEng>>keyId; void* key = serEng.lookupLoadPool(keyId); XSAnnotation* data; serEng>>data; (*objToLoad)->put(key, data); } }}/********************************************************** * * RefHash2KeysTableOf * * SchemaAttDef * ElemVector * ***********************************************************/void XTemplateSerializer::storeObject(RefHash2KeysTableOf<SchemaAttDef>* const objToStore , XSerializeEngine& serEng)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?