From 866b5dad0fef4bcdb1e2a03159dad540d273929d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov <borisk@apache.org> Date: Mon, 23 Nov 2009 15:45:23 +0000 Subject: [PATCH] Store the anonymous type count in the SchemaGrammar object. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@883376 13f79535-47bb-0310-9956-ffa450edef68 --- .../validators/schema/SchemaGrammar.cpp | 1 + .../validators/schema/SchemaGrammar.hpp | 19 +++++++++++++++++++ .../validators/schema/TraverseSchema.cpp | 15 +++++++++++---- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/xercesc/validators/schema/SchemaGrammar.cpp b/src/xercesc/validators/schema/SchemaGrammar.cpp index 71e957f94..e5e8f8654 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.cpp +++ b/src/xercesc/validators/schema/SchemaGrammar.cpp @@ -59,6 +59,7 @@ SchemaGrammar::SchemaGrammar(MemoryManager* const manager) : , fValidated(false) , fDatatypeRegistry(manager) , fScopeCount (0) + , fAnonTypeCount (0) { CleanupType cleanup(this, &SchemaGrammar::cleanUp); diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp index 03eb4091c..e803c0235 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.hpp +++ b/src/xercesc/validators/schema/SchemaGrammar.hpp @@ -243,6 +243,12 @@ public: unsigned int getScopeCount () const; void setScopeCount (unsigned int); + /** + * Get/set anonymous type count. + */ + unsigned int getAnonTypeCount () const; + void setAnonTypeCount (unsigned int); + /*** * Support for Serialization/De-serialization ***/ @@ -334,6 +340,7 @@ private: DatatypeValidatorFactory fDatatypeRegistry; unsigned int fScopeCount; + unsigned int fAnonTypeCount; }; @@ -614,6 +621,18 @@ SchemaGrammar::setScopeCount (unsigned int scopeCount) fScopeCount = scopeCount; } +inline unsigned int +SchemaGrammar::getAnonTypeCount () const +{ + return fAnonTypeCount; +} + +inline void +SchemaGrammar::setAnonTypeCount (unsigned int count) +{ + fAnonTypeCount = count; +} + XERCES_CPP_NAMESPACE_END #endif diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index e39631f40..f63b81f3d 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -169,7 +169,7 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot , fEmptyNamespaceURI(-1) , fCurrentScope(Grammar::TOP_LEVEL_SCOPE) , fScopeCount(schemaGrammar->getScopeCount ()) - , fAnonXSTypeCount(0) + , fAnonXSTypeCount(schemaGrammar->getAnonTypeCount ()) , fCircularCheckIndex(0) , fTargetNSURIString(0) , fDatatypeRegistry(0) @@ -235,11 +235,12 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot preprocessSchema(schemaRoot, schemaURL, multipleImport); doTraverseSchema(schemaRoot); - // Store the scope count in case we need to add more to this - // grammar (multi-import case). schemaGrammar and fSchemaGrammar - // should be the same here. + // Store the scope and anon type counts in case we need to add + // more to this grammar (multi-import case). schemaGrammar and + // fSchemaGrammar should be the same here. // fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); } } @@ -885,6 +886,7 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); if (grammarFound) { fSchemaGrammar = (SchemaGrammar*) aGrammar; } @@ -892,6 +894,8 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { fSchemaGrammar = new (fGrammarPoolMemoryManager) SchemaGrammar(fGrammarPoolMemoryManager); } fScopeCount = fSchemaGrammar->getScopeCount (); + fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount (); + XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) fSchemaGrammar->getGrammarDescription(); gramDesc->setContextType(XMLSchemaDescription::CONTEXT_IMPORT); gramDesc->setLocationHints(importURL); @@ -6940,8 +6944,11 @@ void TraverseSchema::restoreSchemaInfo(SchemaInfo* const toRestore, int targetNSURI = toRestore->getTargetNSURI(); fSchemaGrammar->setScopeCount (fScopeCount); + fSchemaGrammar->setAnonTypeCount (fAnonXSTypeCount); + fSchemaGrammar = (SchemaGrammar*) fGrammarResolver->getGrammar(toRestore->getTargetNSURIString()); fScopeCount = fSchemaGrammar->getScopeCount (); + fAnonXSTypeCount = fSchemaGrammar->getAnonTypeCount (); fTargetNSURI = targetNSURI; fCurrentScope = saveScope; -- GitLab