schemagrammar.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 469 行 · 第 1/2 页

CPP
469
字号
            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;    }     else    {        wasAdded = false;    }    return retVal;}XMLElementDecl* SchemaGrammar::putElemDecl (const   unsigned int    uriId        , const XMLCh* const    baseName        , const XMLCh* const    prefixName        , const XMLCh* const        , unsigned int          scope        , const bool            notDeclared){    SchemaElementDecl* retVal = new (fMemoryManager) SchemaElementDecl    (        prefixName        , baseName        , uriId        , SchemaElementDecl::Any        , Grammar::TOP_LEVEL_SCOPE        , fMemoryManager    );    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;}void SchemaGrammar::reset(){    //    //  We need to reset all of the pools.    //    fElemDeclPool->removeAll();    if(fElemNonDeclPool)        fElemNonDeclPool->removeAll();    fGroupElemDeclPool->removeAll();    fNotationDeclPool->removeAll();    fAnnotations->removeAll();    fValidated = false;}void SchemaGrammar::cleanUp(){    delete fElemDeclPool;    if(fElemNonDeclPool)        delete fElemNonDeclPool;    delete fGroupElemDeclPool;    delete fNotationDeclPool;    fMemoryManager->deallocate(fTargetNamespace);//delete [] fTargetNamespace;    delete fAttributeDeclRegistry;    delete fComplexTypeRegistry;    delete fGroupInfoRegistry;    delete fAttGroupInfoRegistry;    delete fNamespaceScope;    delete fValidSubstitutionGroups;    delete fValidationContext;    delete fGramDesc;    delete fAnnotations;}void SchemaGrammar::setGrammarDescription(XMLGrammarDescription* gramDesc){    if ((!gramDesc) ||         (gramDesc->getGrammarType() != Grammar::SchemaGrammarType))        return;    if (fGramDesc)        delete fGramDesc;    //adopt the grammar Description    fGramDesc = (XMLSchemaDescription*) gramDesc;}// ---------------------------------------------------------------------------//  SchemaGrammar: Helper methods// ---------------------------------------------------------------------------void SchemaGrammar::putAnnotation(void* key, XSAnnotation* const annotation){    fAnnotations->put(key, annotation);}void SchemaGrammar::addAnnotation(XSAnnotation* const annotation){    XSAnnotation* lAnnot = fAnnotations->get(this);	    if (lAnnot)        lAnnot->setNext(annotation);    else        fAnnotations->put(this, annotation);}/*** * Support for Serialization/De-serialization ***/IMPL_XSERIALIZABLE_TOCREATE(SchemaGrammar)void SchemaGrammar::serialize(XSerializeEngine& serEng){    /***     * don't serialize NamespaceScope*    fNamespaceScope;     *                 ValidationContext* fValidationContext;     *                                    fElemNonDeclPool     ***/    Grammar::serialize(serEng);    if (serEng.isStoring())    {        //serialize DatatypeValidatorFactory first        fDatatypeRegistry.serialize(serEng);        /***         *         * Serialize RefHash3KeysIdPool<SchemaElementDecl>* fElemDeclPool;         * Serialize RefHash3KeysIdPool<SchemaElementDecl>* fGroupElemDeclPool;         *        ***/        XTemplateSerializer::storeObject(fElemDeclPool, serEng);        XTemplateSerializer::storeObject(fGroupElemDeclPool, serEng);        /***         * Serialize NameIdPool<XMLNotationDecl>*           fNotationDeclPool;         ***/        XTemplateSerializer::storeObject(fNotationDeclPool, serEng);                    /***         *         * Serialize RefHashTableOf<XMLAttDef>*             fAttributeDeclRegistry;         * Serialize RefHashTableOf<ComplexTypeInfo>*       fComplexTypeRegistry;         * Serialize RefHashTableOf<XercesGroupInfo>*       fGroupInfoRegistry;         * Serialize RefHashTableOf<XercesAttGroupInfo>*    fAttGroupInfoRegistry;         * Serialize RefHashTableOf<XMLRefInfo>*            fIDRefList;         *         ***/        XTemplateSerializer::storeObject(fAttributeDeclRegistry, serEng);        XTemplateSerializer::storeObject(fComplexTypeRegistry, serEng);        XTemplateSerializer::storeObject(fGroupInfoRegistry, serEng);        XTemplateSerializer::storeObject(fAttGroupInfoRegistry, serEng);               /***         * Serialize RefHash2KeysTableOf<ElemVector>*       fValidSubstitutionGroups;         ***/        XTemplateSerializer::storeObject(fValidSubstitutionGroups, serEng);        /***         * Serialize RefHashTableOf<XSAnnotation>*       fAnnotations;         ***/        XTemplateSerializer::storeObject(fAnnotations, serEng);        serEng.writeString(fTargetNamespace);        serEng<<fValidated;        /***         * serialize() method shall be used to store object         * which has been created in ctor         ***/        fGramDesc->serialize(serEng);    }    else    {        fDatatypeRegistry.serialize(serEng);        /***         *         * Deserialize RefHash3KeysIdPool<SchemaElementDecl>* fElemDeclPool;         * Deserialize RefHash3KeysIdPool<SchemaElementDecl>* fGroupElemDeclPool;         *        ***/        XTemplateSerializer::loadObject(&fElemDeclPool, 109, true, 128, serEng);        XTemplateSerializer::loadObject(&fGroupElemDeclPool, 109, true, 128, serEng);        /***         * Deserialize NameIdPool<XMLNotationDecl>*           fNotationDeclPool;         ***/        XTemplateSerializer::loadObject(&fNotationDeclPool, 109, 128, serEng);                    /***         *         * Deserialize RefHashTableOf<XMLAttDef>*             fAttributeDeclRegistry;         * Deserialize RefHashTableOf<ComplexTypeInfo>*       fComplexTypeRegistry;         * Deserialize RefHashTableOf<XercesGroupInfo>*       fGroupInfoRegistry;         * Deserialize RefHashTableOf<XercesAttGroupInfo>*    fAttGroupInfoRegistry;         * Deserialize RefHashTableOf<XMLRefInfo>*            fIDRefList;         *         ***/        XTemplateSerializer::loadObject(&fAttributeDeclRegistry, 29, true, serEng);        XTemplateSerializer::loadObject(&fComplexTypeRegistry, 29, true, serEng);        XTemplateSerializer::loadObject(&fGroupInfoRegistry, 13, true, serEng);        XTemplateSerializer::loadObject(&fAttGroupInfoRegistry, 13, true, serEng);               /***         * Deserialize RefHash2KeysTableOf<ElemVector>*       fValidSubstitutionGroups;         ***/        XTemplateSerializer::loadObject(&fValidSubstitutionGroups, 29, true, serEng);        /***         * Deserialize RefHashTableOf<XSAnnotation>*       fAnnotations;         ***/        XTemplateSerializer::loadObject(&fAnnotations, 29, true, serEng);        serEng.readString(fTargetNamespace);        serEng>>fValidated;        /***         * serialize() method shall be used to load object         * which has been created in ctor         ***/        fGramDesc->serialize(serEng);    }}XERCES_CPP_NAMESPACE_END

⌨️ 快捷键说明

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