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]