You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2003/09/22 21:49:03 UTC

cvs commit: xml-xerces/c/src/xercesc/validators/schema SchemaGrammar.cpp SchemaGrammar.hpp

neilg       2003/09/22 12:49:03

  Modified:    c/src/xercesc/validators/DTD DTDGrammar.cpp DTDGrammar.hpp
               c/src/xercesc/validators/schema SchemaGrammar.cpp
                        SchemaGrammar.hpp
  Log:
  implement change to Grammar::putElem(XMLElementDecl, bool).  If Grammars are used only to hold declared objects, there will be no need for the fElemNonDeclPool tables; make Grammar implementations lazily create them only if the application requires them (which good cpplications should not.)
  
  Revision  Changes    Path
  1.9       +24 -6     xml-xerces/c/src/xercesc/validators/DTD/DTDGrammar.cpp
  
  Index: DTDGrammar.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/DTD/DTDGrammar.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DTDGrammar.cpp	14 Aug 2003 03:00:46 -0000	1.8
  +++ DTDGrammar.cpp	22 Sep 2003 19:49:02 -0000	1.9
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.9  2003/09/22 19:49:02  neilg
  + * implement change to Grammar::putElem(XMLElementDecl, bool).  If Grammars are used only to hold declared objects, there will be no need for the fElemNonDeclPool tables; make Grammar implementations lazily create them only if the application requires them (which good cpplications should not.)
  + *
    * Revision 1.8  2003/08/14 03:00:46  knoaman
    * Code refactoring to improve performance of validation.
    *
  @@ -130,7 +133,9 @@
       //  pools.
       //
       fElemDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(109, 128, fMemoryManager);
  -    fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29, 128, fMemoryManager);
  +    // should not need this in the common situation where grammars
  +    // are built once and then read - NG
  +    //fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29, 128, fMemoryManager);
       fEntityDeclPool = new (fMemoryManager) NameIdPool<DTDEntityDecl>(109, 128, fMemoryManager);
       fNotationDeclPool = new (fMemoryManager) NameIdPool<XMLNotationDecl>(109, 128, fMemoryManager);
   
  @@ -144,7 +149,10 @@
   DTDGrammar::~DTDGrammar()
   {
       delete fElemDeclPool;
  -    delete fElemNonDeclPool;
  +    if(fElemNonDeclPool) 
  +    {
  +        delete fElemNonDeclPool;
  +    }
       delete fEntityDeclPool;
       delete fNotationDeclPool;
       delete fGramDesc;
  @@ -181,6 +189,8 @@
               , DTDElementDecl::Any
               , fMemoryManager
           );
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29, 128, fMemoryManager);
           const unsigned int elemId = fElemNonDeclPool->put(retVal);
           retVal->setId(elemId);
           wasAdded = true;
  @@ -206,9 +216,15 @@
           , DTDElementDecl::Any
           , fMemoryManager
       );
  -    const unsigned int elemId = (notDeclared) ? fElemNonDeclPool->put(retVal)
  -                                              : fElemDeclPool->put(retVal);
  -    retVal->setId(elemId);
  +    if(notDeclared)
  +    {
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29, 128, fMemoryManager);
  +        retVal->setId(fElemNonDeclPool->put(retVal));
  +    } else 
  +    {
  +        retVal->setId(fElemDeclPool->put(retVal));
  +    }
       return retVal;
   }
   
  @@ -218,7 +234,9 @@
       //  We need to reset all of the pools.
       //
       fElemDeclPool->removeAll();
  -    fElemNonDeclPool->removeAll();
  +    // now that we have this, no point in deleting it...
  +    if(fElemNonDeclPool)
  +        fElemNonDeclPool->removeAll();
       fNotationDeclPool->removeAll();
       fEntityDeclPool->removeAll();
       fValidated = false;
  
  
  
  1.10      +19 -4     xml-xerces/c/src/xercesc/validators/DTD/DTDGrammar.hpp
  
  Index: DTDGrammar.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/DTD/DTDGrammar.hpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DTDGrammar.hpp	14 Aug 2003 03:00:46 -0000	1.9
  +++ DTDGrammar.hpp	22 Sep 2003 19:49:02 -0000	1.10
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.10  2003/09/22 19:49:02  neilg
  + * implement change to Grammar::putElem(XMLElementDecl, bool).  If Grammars are used only to hold declared objects, there will be no need for the fElemNonDeclPool tables; make Grammar implementations lazily create them only if the application requires them (which good cpplications should not.)
  + *
    * Revision 1.9  2003/08/14 03:00:46  knoaman
    * Code refactoring to improve performance of validation.
    *
  @@ -140,6 +143,9 @@
       virtual Grammar::GrammarType getGrammarType() const;
       virtual const XMLCh* getTargetNamespace() const;
   
  +    // this method should only be used while the grammar is being
  +    // constructed, not while it is being used
  +    // in a validation episode!
       virtual XMLElementDecl* findOrAddElemDecl
       (
           const   unsigned int    uriId
  @@ -210,7 +216,7 @@
       (
           XMLElementDecl* const elemDecl
           , const bool          notDeclared = false
  -    )   const;
  +    )   ;
   
       virtual unsigned int putNotationDecl
       (
  @@ -224,6 +230,9 @@
       // -----------------------------------------------------------------------
       //  Getter methods
       // -----------------------------------------------------------------------
  +    
  +    // deprecated.  returns the ID of the root element; not
  +    // useable in multithreaded environments!
       unsigned int getRootElemId();
       const DTDEntityDecl* getEntityDecl(const XMLCh* const entName) const;
       DTDEntityDecl* getEntityDecl(const XMLCh* const entName);
  @@ -236,6 +245,8 @@
       // -----------------------------------------------------------------------
       //  Setter methods
       // -----------------------------------------------------------------------
  +
  +    // deprecated.  Not usable in multithreaded environments
       void setRootElemId(unsigned int rootElemId);
   
       virtual void                    setGrammarDescription( XMLGrammarDescription*);
  @@ -413,7 +424,7 @@
   {
       const XMLElementDecl* elemDecl = fElemDeclPool->getByKey(qName);
   
  -    if (!elemDecl)
  +    if (!elemDecl && fElemNonDeclPool)
           elemDecl = fElemNonDeclPool->getByKey(qName);
   
       return elemDecl;
  @@ -426,7 +437,7 @@
   {
       XMLElementDecl* elemDecl = fElemDeclPool->getByKey(qName);
   
  -    if (!elemDecl)
  +    if (!elemDecl && fElemNonDeclPool)
           elemDecl = fElemNonDeclPool->getByKey(qName);
   
       return elemDecl;
  @@ -446,10 +457,14 @@
   
   inline unsigned int
   DTDGrammar::putElemDecl(XMLElementDecl* const elemDecl,
  -                        const bool notDeclared) const
  +                        const bool notDeclared) 
   {
       if (notDeclared)
  +    {
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29, 128, fMemoryManager);
           return fElemNonDeclPool->put((DTDElementDecl*) elemDecl);
  +    }
   
       return fElemDeclPool->put((DTDElementDecl*) elemDecl);
   }
  
  
  
  1.8       +21 -6     xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.cpp
  
  Index: SchemaGrammar.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SchemaGrammar.cpp	31 Jul 2003 17:12:10 -0000	1.7
  +++ SchemaGrammar.cpp	22 Sep 2003 19:49:02 -0000	1.8
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.8  2003/09/22 19:49:02  neilg
  + * implement change to Grammar::putElem(XMLElementDecl, bool).  If Grammars are used only to hold declared objects, there will be no need for the fElemNonDeclPool tables; make Grammar implementations lazily create them only if the application requires them (which good cpplications should not.)
  + *
    * Revision 1.7  2003/07/31 17:12:10  peiyongz
    * Grammar embed grammar description
    *
  @@ -157,7 +160,9 @@
       fElemDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(109, true, 128, fMemoryManager);
   
       try {
  -        fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager);
  +        // should not be necessary now that grammars, once built,
  +        // are read-only
  +        // fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager);
           fGroupElemDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(109, false, 128, fMemoryManager);
           fNotationDeclPool = new (fMemoryManager) NameIdPool<XMLNotationDecl>(109, 128, fMemoryManager);
           fIDRefList = new (fMemoryManager) RefHashTableOf<XMLRefInfo>(29, fMemoryManager);
  @@ -211,6 +216,8 @@
               , Grammar::TOP_LEVEL_SCOPE
               , fMemoryManager
           );
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager);
           const unsigned int elemId = fElemNonDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal);
           retVal->setId(elemId);
           wasAdded = true;
  @@ -238,9 +245,15 @@
           , Grammar::TOP_LEVEL_SCOPE
           , fMemoryManager
       );
  -    const unsigned int elemId = (notDeclared) ? fElemNonDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal)
  -                                              : fElemDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal);
  -    retVal->setId(elemId);
  +    if(notDeclared)
  +    {
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager);
  +        retVal->setId(fElemNonDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal));
  +    } else 
  +    {
  +        retVal->setId(fElemDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal));
  +    }
       return retVal;
   }
   
  @@ -250,7 +263,8 @@
       //  We need to reset all of the pools.
       //
       fElemDeclPool->removeAll();
  -    fElemNonDeclPool->removeAll();
  +    if(fElemNonDeclPool)
  +        fElemNonDeclPool->removeAll();
       fGroupElemDeclPool->removeAll();
       fNotationDeclPool->removeAll();
       fValidated = false;
  @@ -260,7 +274,8 @@
   void SchemaGrammar::cleanUp()
   {
       delete fElemDeclPool;
  -    delete fElemNonDeclPool;
  +    if(fElemDeclPool)
  +        delete fElemNonDeclPool;
       delete fGroupElemDeclPool;
       delete fNotationDeclPool;
       fMemoryManager->deallocate(fTargetNamespace);//delete [] fTargetNamespace;
  
  
  
  1.9       +14 -4     xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp
  
  Index: SchemaGrammar.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SchemaGrammar.hpp	31 Jul 2003 17:12:10 -0000	1.8
  +++ SchemaGrammar.hpp	22 Sep 2003 19:49:03 -0000	1.9
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.9  2003/09/22 19:49:03  neilg
  + * implement change to Grammar::putElem(XMLElementDecl, bool).  If Grammars are used only to hold declared objects, there will be no need for the fElemNonDeclPool tables; make Grammar implementations lazily create them only if the application requires them (which good cpplications should not.)
  + *
    * Revision 1.8  2003/07/31 17:12:10  peiyongz
    * Grammar embed grammar description
    *
  @@ -178,6 +181,9 @@
       virtual Grammar::GrammarType getGrammarType() const;
       virtual const XMLCh* getTargetNamespace() const;
   
  +    // this method should only be used while the grammar is being
  +    // constructed, not while it is being used
  +    // in a validation episode!
       virtual XMLElementDecl* findOrAddElemDecl
       (
           const   unsigned int    uriId
  @@ -248,7 +254,7 @@
       (
           XMLElementDecl* const elemDecl
           , const bool          notDeclared = false
  -    )   const;
  +    )   ;
   
       virtual unsigned int putNotationDecl
       (
  @@ -519,7 +525,7 @@
   
           decl = fGroupElemDeclPool->getByKey(baseName, uriId, scope);
   
  -        if (!decl)
  +        if (!decl && fElemNonDeclPool)
               decl = fElemNonDeclPool->getByKey(baseName, uriId, scope);
       }
   
  @@ -537,7 +543,7 @@
   
           decl = fGroupElemDeclPool->getByKey(baseName, uriId, scope);
   
  -        if (!decl)
  +        if (!decl && fElemNonDeclPool)
               decl = fElemNonDeclPool->getByKey(baseName, uriId, scope);
       }
   
  @@ -568,10 +574,14 @@
   
   inline unsigned int
   SchemaGrammar::putElemDecl(XMLElementDecl* const elemDecl,
  -                           const bool notDeclared) const
  +                           const bool notDeclared) 
   {
       if (notDeclared)
  +    {
  +        if(!fElemNonDeclPool)
  +            fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager);
           return fElemNonDeclPool->put(elemDecl->getBaseName(), elemDecl->getURI(), ((SchemaElementDecl* )elemDecl)->getEnclosingScope(), (SchemaElementDecl*) elemDecl);
  +    }
   
       return fElemDeclPool->put(elemDecl->getBaseName(), elemDecl->getURI(), ((SchemaElementDecl* )elemDecl)->getEnclosingScope(), (SchemaElementDecl*) elemDecl);
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org