00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #if !defined(XMLGRAMMARPOOL_HPP)
00022 #define XMLGRAMMARPOOL_HPP
00023 
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/util/RefHashTableOf.hpp>
00026 #include <xercesc/util/XMemory.hpp>
00027 #include <xercesc/framework/psvi/XSModel.hpp>
00028 
00029 
00030 XERCES_CPP_NAMESPACE_BEGIN
00031 
00032 class Grammar;
00033 class XMLGrammarDescription;
00034 class DTDGrammar;
00035 class SchemaGrammar;
00036 class XMLDTDDescription;
00037 class XMLSchemaDescription;
00038 class XMLStringPool;
00039 class BinInputStream;
00040 class BinOutputStream;
00041 
00042 class  XMLGrammarPool : public XMemory
00043 {
00044 public :
00045     
00047     
00049 
00054     virtual ~XMLGrammarPool(){};
00056 
00057     
00059     
00061 
00075     virtual bool           cacheGrammar(Grammar* const               gramToCache) = 0;
00076     
00084     virtual Grammar*       retrieveGrammar(XMLGrammarDescription* const gramDesc) = 0;
00085     
00086         
00095     virtual Grammar*       orphanGrammar(const XMLCh* const nameSpaceKey) = 0;  
00096 
00097 
00103     virtual RefHashTableOfEnumerator<Grammar> getGrammarEnumerator() const = 0;
00104 
00111     virtual bool           clear() = 0;
00112         
00122     virtual void           lockPool() = 0;
00123     
00134     virtual void           unlockPool() = 0;
00135 
00137 
00138     
00140     
00142 
00147     virtual DTDGrammar*            createDTDGrammar() = 0;
00148 
00153     virtual SchemaGrammar*         createSchemaGrammar() = 0;
00154                     
00159     virtual XMLDTDDescription*     createDTDDescription(const XMLCh* const systemId) = 0;
00164     virtual XMLSchemaDescription*  createSchemaDescription(const XMLCh* const targetNamespace) = 0;
00165 
00167 
00168     
00170     
00172 
00173     
00174 
00175 
00176 
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186     virtual XSModel *getXSModel() = 0;
00187 
00188     
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200 
00201 
00202 
00203     virtual XSModel *getXSModel(bool& XSModelWasChanged)
00204     {
00205         XSModelWasChanged = true;
00206         return getXSModel();
00207     }
00208     
00209     
00210 
00211     
00213     
00215 
00220     inline MemoryManager*    getMemoryManager()
00221     {
00222         return fMemMgr;
00223     }
00224 
00231     virtual XMLStringPool *getURIStringPool() = 0;
00233 
00234     
00236     
00237 
00238     
00239 
00240 
00241 
00242 
00243 
00244 
00245 
00246 
00247 
00248 
00249 
00250 
00251 
00252 
00253 
00254 
00255 
00256 
00257 
00258 
00259 
00260 
00261 
00262 
00263 
00264 
00265 
00266 
00267 
00268 
00269 
00270 
00271 
00272 
00273 
00274 
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283 
00284 
00285 
00286 
00287 
00288 
00289 
00290     virtual void     serializeGrammars(BinOutputStream* const)  = 0; 
00291     virtual void     deserializeGrammars(BinInputStream* const) = 0;       
00292        
00293     
00294 
00295 
00296 
00297     inline void setIgnoreSerializedAnnotations(const bool flag)
00298     {
00299         fIgnoreSerializedAnnotations = flag;
00300     };
00301     inline bool getIgnoreSerializedAnnotations() const
00302     {
00303         return fIgnoreSerializedAnnotations;
00304     };
00305 
00306 protected :
00307     
00309     
00311     XMLGrammarPool(MemoryManager* const memMgr = XMLPlatformUtils::fgMemoryManager)
00312     :fMemMgr(memMgr)
00313     ,fIgnoreSerializedAnnotations(false)
00314     {
00315     };
00317 
00318 private :
00319     
00321     
00323     XMLGrammarPool(const XMLGrammarPool& );
00324     XMLGrammarPool& operator=(const XMLGrammarPool& );
00326 
00327     
00328     
00329     
00330     
00331     
00332     
00333     
00334     
00335     MemoryManager* const  fMemMgr;
00336     bool fIgnoreSerializedAnnotations;
00337 
00338 };
00339 
00340 XERCES_CPP_NAMESPACE_END
00341 
00342 #endif