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 + -
显示快捷键?