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