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]