peiyongz 2004/03/09 12:59:28 Modified: c/src/xercesc/internal XTemplateSerializer.cpp Log: restore key string from string pool from datatypevalidator Revision Changes Path 1.9 +42 -5 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.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- XTemplateSerializer.cpp 1 Mar 2004 23:20:46 -0000 1.8 +++ XTemplateSerializer.cpp 9 Mar 2004 20:59:28 -0000 1.9 @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.9 2004/03/09 20:59:28 peiyongz + * restore key string from string pool from datatypevalidator + * * 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. @@ -1295,7 +1298,15 @@ while (e.hasMoreElements()) { - DatatypeValidator* data = objToStore->get(e.nextElementKey()); + /*** + * 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); } } @@ -1329,12 +1340,37 @@ serEng>>itemNumber; for (int itemIndex = 0; itemIndex < itemNumber; itemIndex++) - { + { DatatypeValidator* data; data = DatatypeValidator::loadDV(serEng); - XMLCh* key = (XMLCh*) data->getTypeName(); - (*objToLoad)->put((void*)key, data); + /*** + * 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); } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]