peiyongz 2004/03/01 15:20:46 Modified: c/src/xercesc/internal XTemplateSerializer.cpp Log: For RefHashTableOf/RefHash2KeysTableOf/RefHashTable3KeysIdPool, resovle "key string" either from the data itself or the GrammarPool's StringPool. Revision Changes Path 1.8 +76 -85 xml-xerces/c/src/xercesc/internal/XTemplateSerializer.cpp Index: XTemplateSerializer.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XTemplateSerializer.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XTemplateSerializer.cpp 1 Mar 2004 15:04:25 -0000 1.7 +++ XTemplateSerializer.cpp 1 Mar 2004 23:20:46 -0000 1.8 @@ -57,8 +57,9 @@ /* * $Id$ * $Log$ - * Revision 1.7 2004/03/01 15:04:25 peiyongz - * save/restore original fHashModulus + * Revision 1.8 2004/03/01 23:20:46 peiyongz + * For RefHashTableOf/RefHash2KeysTableOf/RefHashTable3KeysIdPool, + * resovle "key string" either from the data itself or the GrammarPool's StringPool. * * Revision 1.6 2003/12/17 00:18:34 cargilld * Update to memory management so that the static memory manager (one used to call Initialize) is only for static data. @@ -799,10 +800,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - KVStringPair* data = objToStore->get(key); + KVStringPair* data = objToStore->get(e.nextElementKey()); serEng<<data; } } @@ -836,13 +834,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - KVStringPair* data; serEng>>data; - (*objToLoad)->put((void*)key, data); + (*objToLoad)->put((void*)data->getKey(), data); } } } @@ -869,10 +864,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - XMLAttDef* data = objToStore->get(key); + XMLAttDef* data = objToStore->get(e.nextElementKey()); serEng<<data; } } @@ -907,9 +899,6 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - //This is used solely by SchemaGrammar and by all means it must be //SchemaAttDef, ideally we may change it to RefHashTableOf<SchemaAttDef> //later on. @@ -918,7 +907,7 @@ SchemaAttDef* data; serEng>>data; - (*objToLoad)->put((void*)key, data); + (*objToLoad)->put((void*)data->getAttName()->getLocalPart(), data); } } } @@ -946,10 +935,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - DTDAttDef* data = objToStore->get(key); + DTDAttDef* data = objToStore->get(e.nextElementKey()); serEng<<data; } } @@ -984,14 +970,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - DTDAttDef* data; serEng>>data; - //key==data->getFullName() - (*objToLoad)->put((void*)key, data); + (*objToLoad)->put((void*)data->getFullName(), data); } } } @@ -1019,10 +1001,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - ComplexTypeInfo* data = objToStore->get(key); + ComplexTypeInfo* data = objToStore->get(e.nextElementKey()); serEng<<data; } } @@ -1057,14 +1036,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - ComplexTypeInfo* data; serEng>>data; - //key==data->getTypeName() - (*objToLoad)->put((void*)key, data); + (*objToLoad)->put((void*)data->getTypeName(), data); } } } @@ -1092,8 +1067,23 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); + 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; @@ -1130,9 +1120,11 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); + unsigned int id; + serEng>>id; + XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(id); + XercesGroupInfo* data; serEng>>data; @@ -1164,10 +1156,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - XercesAttGroupInfo* data = objToStore->get(key); + XercesAttGroupInfo* data = objToStore->get(e.nextElementKey()); serEng<<data; } } @@ -1202,12 +1191,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - XercesAttGroupInfo* data; serEng>>data; + XMLCh* key = (XMLCh*) serEng.getStringPool()->getValueForId(data->getNameId()); (*objToLoad)->put((void*)key, data); } } @@ -1308,10 +1295,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - DatatypeValidator* data = objToStore->get(key); + DatatypeValidator* data = objToStore->get(e.nextElementKey()); DatatypeValidator::storeDV(serEng, data); } } @@ -1346,12 +1330,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - DatatypeValidator* data; data = DatatypeValidator::loadDV(serEng); + XMLCh* key = (XMLCh*) data->getTypeName(); (*objToLoad)->put((void*)key, data); } } @@ -1380,10 +1362,7 @@ while (e.hasMoreElements()) { - XMLCh* key = (XMLCh*) e.nextElementKey(); - serEng.writeString(key); - - Grammar* data = objToStore->get(key); + Grammar* data = objToStore->get(e.nextElementKey()); Grammar::storeGrammar(serEng, data); } } @@ -1418,12 +1397,10 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key; - serEng.readString(key); - Grammar* data; data = Grammar::loadGrammar(serEng); + XMLCh* key = (XMLCh*) data->getGrammarDescription()->getGrammarKey(); (*objToLoad)->put((void*)key, data); } } @@ -1542,11 +1519,8 @@ while (e.hasMoreElements()) { XMLCh* key1; - int key2; - + int key2; e.nextElementKey((void*&)key1, key2); - serEng.writeString(key1); - serEng<<key2; SchemaAttDef* data = objToStore->get(key1, key2); serEng<<data; @@ -1586,16 +1560,11 @@ for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - XMLCh* key1; - serEng.readString(key1); - - int key2; - serEng>>key2; - SchemaAttDef* data; serEng>>data; - //key1==data->getAttName()->getLocalPart() + XMLCh* key1 = data->getAttName()->getLocalPart(); + int key2 = data->getAttName()->getURI(); //key2==data->getId() (*objToLoad)->put((void*)key1, key2, data); @@ -1637,7 +1606,6 @@ serEng<<key2; ElemVector* data = objToStore->get(key1, key2); - storeObject(data, serEng); } @@ -1686,6 +1654,40 @@ //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); } @@ -1728,9 +1730,6 @@ while (e.hasMoreKeys()) { e.nextElementKey((void*&)key1, key2, key3); - serEng.writeString(key1); - serEng<<key2; - serEng<<key3; SchemaElementDecl* data = objToStore->getByKey(key1, key2, key3); serEng<<data; @@ -1768,21 +1767,14 @@ int itemNumber = 0; serEng>>itemNumber; - XMLCh* key1; - int key2; - int key3; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) { - serEng.readString(key1); - serEng>>key2; - serEng>>key3; - SchemaElementDecl* elemDecl; serEng>>elemDecl; - - (*objToLoad)->put(key1 - , key2 - , key3 + + (*objToLoad)->put(elemDecl->getBaseName() + , elemDecl->getURI() + , elemDecl->getEnclosingScope() , elemDecl); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]