⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlgrammarpool.hpp

📁 经典开源游戏glest的源代码
💻 HPP
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: XMLGrammarPool.hpp 568078 2007-08-21 11:43:25Z amassari $ */#if !defined(XMLGRAMMARPOOL_HPP)#define XMLGRAMMARPOOL_HPP#include <xercesc/util/PlatformUtils.hpp>#include <xercesc/util/RefHashTableOf.hpp>#include <xercesc/util/XMemory.hpp>#include <xercesc/framework/psvi/XSModel.hpp>XERCES_CPP_NAMESPACE_BEGINclass Grammar;class XMLGrammarDescription;class DTDGrammar;class SchemaGrammar;class XMLDTDDescription;class XMLSchemaDescription;class XMLStringPool;class BinInputStream;class BinOutputStream;class XMLPARSER_EXPORT XMLGrammarPool : public XMemory{public :    // -----------------------------------------------------------------------    /** @name Virtual destructor for derived classes */    // -----------------------------------------------------------------------    //@{    /**      * virtual destructor      *      */    virtual ~XMLGrammarPool(){};    //@}    // -----------------------------------------------------------------------    /** @name The Grammar Pool Interface */    // -----------------------------------------------------------------------    //@{    /**      * cacheGrammar      *      * Provide the grammar pool with an opportunity      * to cache the given grammar.  If the pool does not choose to do so,      * it should return false; otherwise, it should return true, so that      * the caller knows whether the grammar has been adopted.      *      * @param gramToCache the Grammar to be cached in the grammar pool      * @return true if the grammar pool has elected to cache the grammar (in which case      * it is assumed to have adopted it); false if it does not cache it	  *      */    virtual bool           cacheGrammar(Grammar* const               gramToCache) = 0;        /**      * retrieveGrammar      *      * @param gramDesc the Grammar Description used to search for grammar	  *                  cached in the grammar pool	  *      */    virtual Grammar*       retrieveGrammar(XMLGrammarDescription* const gramDesc) = 0;                /**      * orphanGrammar      *      * grammar removed from the grammar pool and owned by the caller      *      * @param nameSpaceKey Key used to search for grammar in the grammar pool      * @return the grammar that was removed from the pool (0 if none)      */    virtual Grammar*       orphanGrammar(const XMLCh* const nameSpaceKey) = 0;      /**     * Get an enumeration of the cached Grammars in the Grammar pool     *     * @return enumeration of the cached Grammars in Grammar pool     */    virtual RefHashTableOfEnumerator<Grammar> getGrammarEnumerator() const = 0;    /**      * clear      *      * all grammars are removed from the grammar pool and deleted.      * @return true if the grammar pool was cleared. false if it did not.      */    virtual bool           clear() = 0;            /**      * lockPool      *	  * When this method is called by the application, the       * grammar pool should stop adding new grammars to the cache.      * This should result in the grammar pool being sharable      * among parsers operating in different threads.      *      */    virtual void           lockPool() = 0;        /**      * unlockPool      *	  * After this method has been called, the grammar pool implementation      * should return to its default behaviour when cacheGrammars(...) is called.      * One effect, depending on the underlying implementation, is that the grammar pool      * may no longer be thread-safe (even on read operations).      *      * For PSVI support any previous XSModel that was produced will be deleted.      */    virtual void           unlockPool() = 0;    //@}    // -----------------------------------------------------------------------    /** @name  Factory interface */    // -----------------------------------------------------------------------    //@{    /**      * createDTDGrammar      *      */    virtual DTDGrammar*            createDTDGrammar() = 0;    /**      * createSchemaGrammar      *      */    virtual SchemaGrammar*         createSchemaGrammar() = 0;                        /**      * createDTDDescription      *      */	    virtual XMLDTDDescription*     createDTDDescription(const XMLCh* const systemId) = 0;    /**      * createSchemaDescription      *      */		    virtual XMLSchemaDescription*  createSchemaDescription(const XMLCh* const targetNamespace) = 0;    //@}    // -----------------------------------------------------------------------    /** @name  schema component model support */    // -----------------------------------------------------------------------                                                            //@{    /***      * Return an XSModel derived from the components of all SchemaGrammars      * in the grammar pool.  If the pool is locked, this should      * be a thread-safe operation.  It should return null if and only if      * the pool is empty.      *      * Calling getXSModel() on an unlocked grammar pool may result in the      * creation of a new XSModel with the old XSModel being deleted.  The      * function will return a different address for the XSModel if it has      * changed.      *       * @deprecated (shouldn't use address to determine if XSModel changed)      */    virtual XSModel *getXSModel() = 0;    /***      * Return an XSModel derived from the components of all SchemaGrammars      * in the grammar pool.  If the pool is locked, this should      * be a thread-safe operation.      *      * NOTE: The function should NEVER return NULL.  If there are no grammars in      *       the pool it should return an XSModel containing the Schema for Schema.            *      * Calling getXSModel() on an unlocked grammar pool may result in the      * creation of a new XSModel with the old XSModel being deleted.      * The bool parameter will indicate if the XSModel was changed.      *           * For source code compatibility, default implementation is to say      * XSModelWasChanged.      */    virtual XSModel *getXSModel(bool& XSModelWasChanged)    {        XSModelWasChanged = true;        return getXSModel();    }	    // @}    // -----------------------------------------------------------------------    /** @name  Getter */    // -----------------------------------------------------------------------                                                            //@{    /**      * getMemoryManager      *      */    	inline MemoryManager*    getMemoryManager()    {        return fMemMgr;    }    /**      * Return an XMLStringPool for use by validation routines.        * Implementations should not create a string pool on each call to this      * method, but should maintain one string pool for all grammars      * for which this pool is responsible.      */    virtual XMLStringPool *getURIStringPool() = 0;    //@}    // -----------------------------------------------------------------------    /** serialization and deserialization support */    // -----------------------------------------------------------------------                                                            /***      *      * 1. Context: Serialize/Deserialize All Grammars In One Session      *      *    Since it is common that a declaration in one grammar may reference       *    to definitions in other grammars, it is required to serialize those       *    related (or interdependent) grammars in to one persistent data store       *    in one serialization session (storing), and deserialize them from the      *    persistent data store in one deserialization session (loading) back      *    to the grammar pool.          *      * 2. Multiple serializations      *      *    It is acceptable that client application requests more than one       *    grammar serialization on a particular grammar pool, to track the       *    different grammars cached, or for whatever reasons that client       *    application is interested in.       *      * 3. Multiple deserializations      *       *    Request for grammar deserialization either after the grammar pool has       *    its own cached grammars, or request for more than one grammar       *    deserialization, may cause undesired and unpredictable consequence      *    and therefore client application shall be aware that individual       *    implementationis may NOT support this.      *      *    However it is strongly recommended that the client application requests       *    no more than one grammar deserialization even a particular implementation      *    may allow multiple deserializations.      *      * 4. Locking      *      *    Both serialization and deserialization requires to lock the grammar pool      *    before operation and unlock after operation. In the case the grammar pool      *    is locked by a third party, the request for serialization/deserialization      *    will NOT be entertained.      *      * 5. Versioning      *      *    The Persistent data store has a version tag to be verified during       *    deserialization, thus a grammar pool may decide if it supports      *    a binary data created by a different release of Xerces.      *       * 6. Clean up      *      *    The client application shall be aware that in the event of an exception      *    thrown due to a corrupted data store during deserialization, implementation      *    may not be able to clean up all resources allocated, and therefore it is       *    client application's responsibility to clean up those unreleased resources.      *      *      */    virtual void     serializeGrammars(BinOutputStream* const)  = 0;     virtual void     deserializeGrammars(BinInputStream* const) = 0;       	       /*     * Set/get a flag to not create XSAnnotations when deserializing the grammar.     * Defaults to false (create XSAnnotations when deserializing the grammar).     */    inline void setIgnoreSerializedAnnotations(const bool flag)    {        fIgnoreSerializedAnnotations = flag;    };    inline bool getIgnoreSerializedAnnotations() const    {        return fIgnoreSerializedAnnotations;    };protected :    // -----------------------------------------------------------------------    /**  Hidden Constructors */    // -----------------------------------------------------------------------    //@{    XMLGrammarPool(MemoryManager* const memMgr = XMLPlatformUtils::fgMemoryManager)    :fMemMgr(memMgr)    ,fIgnoreSerializedAnnotations(false)    {    };    //@}private :    // -----------------------------------------------------------------------    /** name  Unimplemented copy constructor and operator= */    // -----------------------------------------------------------------------    //@{    XMLGrammarPool(const XMLGrammarPool& );    XMLGrammarPool& operator=(const XMLGrammarPool& );    //@}    // -----------------------------------------------------------------------    //    // fMemMgr: plugged-in (or defaulted-in) memory manager    //          not owned     //          no reset after initialization    //    // -----------------------------------------------------------------------        MemoryManager* const  fMemMgr;    bool fIgnoreSerializedAnnotations;};XERCES_CPP_NAMESPACE_END#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -