peiyongz 2003/10/29 08:22:58 Modified: c/src/xercesc/validators/schema ComplexTypeInfo.cpp ComplexTypeInfo.hpp Log: allow proper recreation of ContentModel from deserialization Revision Changes Path 1.16 +41 -61 xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.cpp Index: ComplexTypeInfo.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- ComplexTypeInfo.cpp 21 Oct 2003 10:23:53 -0000 1.15 +++ ComplexTypeInfo.cpp 29 Oct 2003 16:22:58 -0000 1.16 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.16 2003/10/29 16:22:58 peiyongz + * allow proper recreation of ContentModel from deserialization + * * Revision 1.15 2003/10/21 10:23:53 amassari * When creating a new list of attributes, use the assigned memory manager * @@ -261,6 +264,7 @@ delete fContentModel; fMemoryManager->deallocate(fFormattedModel); //delete [] fFormattedModel; fMemoryManager->deallocate(fContentSpecOrgURI); //delete [] fContentSpecOrgURI; + } // --------------------------------------------------------------------------- @@ -490,7 +494,11 @@ } } + return buildContentModel(aSpecNode); +} +XMLContentModel* ComplexTypeInfo::buildContentModel(ContentSpecNode* const aSpecNode) +{ XMLContentModel* cmRet = 0; if (fContentType == SchemaElementDecl::Simple) { // just return nothing @@ -526,8 +534,6 @@ return cmRet; } - - // --------------------------------------------------------------------------- // SchemaElementDecl: Private helper methods // --------------------------------------------------------------------------- @@ -935,6 +941,13 @@ serEng<<fBaseComplexTypeInfo; serEng<<fContentSpec; + // we need to save a flag to specify + // if this content spce has been expanded or not + if (fContentModel) + serEng<<true; + else + serEng<<false; + serEng<<fAttWildCard; serEng<<fAttList; @@ -946,30 +959,6 @@ XTemplateSerializer::storeObject(fElements, serEng); XTemplateSerializer::storeObject(fAttDefs, serEng); - /*** - * - * fContentSpecOrgURI: start of the array - * fContentSpecOrgURISize: size of the array - * fUniqueURI: the current last element in the array - ***/ - if (fContentSpecOrgURI) - { - serEng<<(int)1; - serEng<<fContentSpecOrgURISize; - serEng<<fUniqueURI; - - unsigned int* tempURI = fContentSpecOrgURI; - for (unsigned int i = 0 ; i < fUniqueURI; i++) - { - serEng<<*tempURI; - tempURI++; - } - } - else - { - serEng<<(int)0; - } - /*** * Don't serialize * @@ -977,6 +966,10 @@ * fFormattedModel; * fLocator; * fSpecNodesToDelete + * + * fContentSpecOrgURI: start of the array + * fContentSpecOrgURISize: size of the array + * fUniqueURI: the current last element in the array ***/ } else @@ -1002,6 +995,18 @@ serEng>>fBaseComplexTypeInfo; serEng>>fContentSpec; + + //read the expanded flag + bool expanded = false; + serEng>>expanded; + if (expanded) + { + fContentModel = buildContentModel(fContentSpec); + } + //else + // if contentSpec has NOT been expanded yet, + // leave the building to makeContentModel + serEng>>fAttWildCard; serEng>>fAttList; @@ -1010,52 +1015,27 @@ * Deserialize RefVectorOf<SchemaElementDecl>* fElements; * Deserialize RefHash2KeysTableOf<SchemaAttDef>* fAttDefs; ***/ - XTemplateSerializer::loadObject(&fElements, 8, true, serEng); + XTemplateSerializer::loadObject(&fElements, 8, false, serEng); XTemplateSerializer::loadObject(&fAttDefs, 8, true, serEng); - /*** - * - * fContentSpecOrgURI: start of the array - * fContentSpecOrgURISize: size of the array - * fUniqueURI: the current last element in the array - ***/ - int i; - serEng>>i; - - if (i==1) - { - serEng>>fContentSpecOrgURISize; - serEng>>fUniqueURI; - - if (!fContentSpecOrgURI) - { - fContentSpecOrgURI = (unsigned int*) fMemoryManager->allocate - (fContentSpecOrgURISize * sizeof(unsigned int)); - } - - unsigned int* tempURI = fContentSpecOrgURI; - for (unsigned int i = 0 ; i < fUniqueURI; i++) - { - unsigned int val; - serEng>>val; - *tempURI = val; - tempURI++; - } - } - //else do nothing - /*** * Don't deserialize * - * fContentModel; * fFormattedModel; - * fLocator; + * fLocator; * fSpecNodesToDelete + * + * fContentSpecOrgURI: start of the array + * fContentSpecOrgURISize: size of the array + * fUniqueURI: the current last element in the array ***/ - fContentModel = 0; + fFormattedModel = 0; fLocator = 0; fSpecNodesToDelete = 0; + fContentSpecOrgURI = 0; + fContentSpecOrgURISize = 0; + fUniqueURI = 0; } } 1.17 +2 -1 xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.hpp Index: ComplexTypeInfo.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/ComplexTypeInfo.hpp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ComplexTypeInfo.hpp 10 Oct 2003 16:25:40 -0000 1.16 +++ ComplexTypeInfo.hpp 29 Oct 2003 16:22:58 -0000 1.17 @@ -210,6 +210,7 @@ void faultInAttDefList() const; XMLContentModel* createChildModel(ContentSpecNode* specNode, const bool isMixed); XMLContentModel* makeContentModel(const bool checkUPA = false, ContentSpecNode* const specNode = 0); + XMLContentModel* buildContentModel(ContentSpecNode* const specNode); XMLCh* formatContentModel () const ; ContentSpecNode* expandContentModel(ContentSpecNode* const curNode, const int minOccurs, const int maxOccurs); ContentSpecNode* convertContentSpecTree(ContentSpecNode* const curNode, const bool checkUPA = false);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]