本文整理汇总了C++中Submodel类的典型用法代码示例。如果您正苦于以下问题:C++ Submodel类的具体用法?C++ Submodel怎么用?C++ Submodel使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Submodel类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkComp
void checkComp(CompSBMLDocumentPlugin* compdoc, set<string>& components, set<string>& tests, const map<string, vector<double> >& results)
{
SBMLDocument* doc = compdoc->getSBMLDocument();
List* allElements = doc->getAllElements();
for (unsigned int e=0; e<allElements->getSize(); e++) {
SBase* element = static_cast<SBase*>(allElements->get(e));
ReplacedElement* re;
Submodel* submod;
switch(element->getTypeCode()) {
case SBML_COMP_SUBMODEL:
components.insert("comp:Submodel");
submod = static_cast<Submodel*>(element);
if (submod->isSetExtentConversionFactor()) {
tests.insert("comp:ExtentConversionFactor");
}
if (submod->isSetTimeConversionFactor()) {
tests.insert("comp:TimeConversionFactor");
}
break;
case SBML_COMP_MODELDEFINITION:
components.insert("comp:ModelDefinition");
break;
case SBML_COMP_EXTERNALMODELDEFINITION:
components.insert("comp:ExternalModelDefinition");
break;
case SBML_COMP_SBASEREF:
components.insert("comp:SBaseRef");
break;
case SBML_COMP_DELETION:
components.insert("comp:Deletion");
break;
case SBML_COMP_REPLACEDELEMENT:
components.insert("comp:ReplacedElement");
re = static_cast<ReplacedElement*>(element);
if (re->isSetConversionFactor()) {
tests.insert("comp:ConversionFactor");
}
break;
case SBML_COMP_REPLACEDBY:
components.insert("comp:ReplacedBy");
break;
case SBML_COMP_PORT:
components.insert("comp:Port");
break;
default:
break;
}
}
for (map<string, vector<double> >::const_iterator result=results.begin();
result != results.end(); result++) {
string id = result->first;
if (id.find("__") != string::npos) {
//It is probably a submodel element, renamed
tests.insert("comp:SubmodelOutput");
}
}
}
示例2: getSBMLDocument
int CompModelPlugin::collectDeletionsAndDeleteSome(set<SBase*>* removed, set<SBase*>* toremove)
{
int ret = LIBSBML_OPERATION_SUCCESS;
SBMLDocument* doc = getSBMLDocument();
Model* model = static_cast<Model*>(getParentSBMLObject());
if (model==NULL) {
if (doc) {
string error = "Unable to attempt to perform deletions in CompModelPlugin::collectDeletionsAndDeleteSome: no parent model could be found for the given 'comp' model plugin element.";
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error);
}
return LIBSBML_OPERATION_FAILED;
}
//Since deletions only exist in submodels, loop through the submodels.
for (unsigned int sub=0; sub<getNumSubmodels(); sub++) {
Submodel* submodel = getSubmodel(sub);
//First perform any deletions
for (unsigned int d=0; d<submodel->getNumDeletions(); d++) {
Deletion* deletion = submodel->getDeletion(d);
SBase* todel = deletion->getReferencedElement();
if (todel && (todel->getTypeCode() == SBML_COMP_DELETION ||
todel->getTypeCode() == SBML_COMP_REPLACEDBY ||
todel->getTypeCode() == SBML_COMP_REPLACEDELEMENT ||
todel->getTypeCode() == SBML_LOCAL_PARAMETER) )
{
//Go ahead and delete it!
set<SBase*> newToRemove;
newToRemove.insert(todel);
removeCollectedElements(removed, &newToRemove);
}
else {
//Otherwise, just collect it.
ret = deletion->collectDeletions(removed, toremove);
if (ret!=LIBSBML_OPERATION_SUCCESS) {
return ret;
}
}
}
//Next collect any deletions in that instantiated submodel (any that weren't just deleted)
Model* mod = submodel->getInstantiation();
if (mod==NULL) {
//getInstantiation sets its own error messages.
return LIBSBML_OPERATION_FAILED;
}
CompModelPlugin* modplug = static_cast<CompModelPlugin*>(mod->getPlugin(getPrefix()));
if (modplug==NULL) {
if (doc) {
//Shouldn't happen: 'getInstantiation' turns on the comp plugin.
string error = "Unable to rename elements in CompModelPlugin::collectDeletionsAndDeleteSome: no valid 'comp' plugin for the model instantiated from submodel " + submodel->getId();
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error);
}
return LIBSBML_OPERATION_FAILED;
}
modplug->collectDeletionsAndDeleteSome(removed, toremove);
}
return ret;
}
示例3: getSBMLDocument
SBase*
ReplacedElement::getReferencedElementFrom(Model* model)
{
SBMLDocument* doc = getSBMLDocument();
SBase* referent = Replacing::getReferencedElementFrom(model);
if (referent != NULL) return referent;
if (!isSetDeletion()) {
//In this case, something else went wrong in getReferencedElementFrom, which will have set its own error message.
return NULL;
}
model = getParentModel(this);
if (model==NULL) {
if (doc) {
string error = "In ReplacedElement::getReferencedElementFrom, unable to find referenced deletion '" + getDeletion() + "' for <replacedElement>: no parent model could be found.";
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return NULL;
}
CompModelPlugin* mplugin = static_cast<CompModelPlugin*>(model->getPlugin(getPrefix()));
if (mplugin==NULL) {
if (doc) {
string error = "In ReplacedElement::getReferencedElementFrom, unable to find referenced deletion '" + getDeletion() + "' for <replacedElement>: no 'comp' plugin for the parent model could be found.";
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return NULL;
}
Submodel* submod = mplugin->getSubmodel(getSubmodelRef());
if (submod==NULL) {
if (doc) {
string error = "In ReplacedElement::getReferencedElementFrom, unable to find referenced deletion '" + getDeletion() + "' for <replacedElement>: no such submodel '" + getSubmodelRef() + "'.";
doc->getErrorLog()->logPackageError("comp", CompReplacedElementSubModelRef, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return NULL;
}
SBase* ret = submod->getDeletion(getDeletion());
if (ret==NULL && doc) {
string error = "In ReplacedElement::getReferencedElementFrom, unable to find referenced deletion '" + getDeletion() + "' for <replacedElement>: no deletion with that ID exists in the model.";
doc->getErrorLog()->logPackageError("comp", CompDeletionMustReferenceObject, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return ret;
}
示例4: saveAllReferencedElements
/*
* Loop through all Submodels in this Model, instantiate all of them,
* perform all deletions, and synchronize all replacements.
* The resulting models are stored in the Submodel objects,
* and available from 'Submodel::getInstantiation()'
*/
int
CompModelPlugin::instantiateSubmodels()
{
Model* model = static_cast<Model*>(getParentSBMLObject());
if (model==NULL)
return LIBSBML_INVALID_OBJECT;
int ret;
// First we instantiate all the submodels.
// This acts recursively downward through the stack.
for (unsigned int sub=0; sub<mListOfSubmodels.size(); sub++)
{
Submodel* submodel = mListOfSubmodels.get(sub);
// Instead of 'instantiate', since we might have already
// been instantiated ourselves from above.
Model* submodinst = submodel->getInstantiation();
if (submodinst == NULL ) {
//'getInstantiation' already sets any errors that might have occurred.
return LIBSBML_OPERATION_FAILED;
}
//// if we have a transformer specified, then we need to propagate it, so it can
//// be used
// this needs to happen in Submodel:instantiate
//if (isSetTransformer())
//{
// CompModelPlugin* other = dynamic_cast<CompModelPlugin*>(submodinst->getPlugin("comp"));
// if (other != NULL)
// other->setTransformer(getTransformer());
//}
}
// Next, recursively find all the targets of SBaseRef elements
// and save them, since we're about to rename everything and
// we won't be able to find things by name any more.
ret = saveAllReferencedElements();
if (ret != LIBSBML_OPERATION_SUCCESS) {
//saveAllReferencedElements sets any errors.
return ret;
}
mRemoved.clear();
set<SBase*> toremove;
// Collect deletions (top-down):
// need to do this before renaming in case we delete a local parameter.
ret = collectDeletionsAndDeleteSome(&mRemoved, &toremove);
if (ret != LIBSBML_OPERATION_SUCCESS) {
return ret;
}
//Next, we rename *all* the elements so everything is unique.
ret = renameAllIDsAndPrepend("");
if (ret != LIBSBML_OPERATION_SUCCESS) {
return ret;
}
//Perform replacements and conversions (top-down) and collect them.
ret = collectRenameAndConvertReplacements(&mRemoved, &toremove);
if (ret != LIBSBML_OPERATION_SUCCESS) {
return ret;
}
//Finally, actually remove the collected elements from the model--they are
// all now redundant. Have to wait until now to do this, because of the
// possibility of nested constructs: replacing the child of a replaced
// element, for example, or even replacing the child of a deleted
// element.
removeCollectedElements(&mRemoved, &toremove);
mRemoved.clear();
return LIBSBML_OPERATION_SUCCESS;
}
示例5: getSBMLDocument
int
Replacing::saveReferencedElement()
{
SBMLDocument* doc = getSBMLDocument();
if (!isSetSubmodelRef()) {
if (doc) {
string error = "Unable to find referenced element in Replacing::saveReferencedElement: the given <" + getElementName() + "> element";
if (isSetId()) {
error += " '" + getId() + "'";
}
error += " has no 'submodelRef' attribute.";
doc->getErrorLog()->logPackageError("comp", CompReplacedElementAllowedAttributes, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_OBJECT;
}
Model* model = getParentModel(this);
if (model==NULL) {
if (doc) {
string error = "Unable to find referenced element in Replacing::saveReferencedElement: no parent model could be found for the given <" + getElementName() + "> element";
if (isSetId()) {
error += " '" + getId() + "'.";
}
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_OPERATION_FAILED;
}
CompModelPlugin* cmp = static_cast<CompModelPlugin*>(model->getPlugin(getPrefix()));
if (cmp==NULL) {
if (doc) {
string error = "Unable to find referenced element in Replacing::saveReferencedElement: no 'comp' plugin for the parent model could be found for the given <" + getElementName() + "> element";
if (isSetId()) {
error += " '" + getId() + "'.";
}
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_OPERATION_FAILED;
}
Submodel* submod = cmp->getSubmodel(getSubmodelRef());
if (submod==NULL) {
if (doc) {
string error = "Unable to find referenced element for the given <" + getElementName() + "> element";
if (isSetId()) {
error += " '" + getId() + "'";
}
error += " in Replacing::saveReferencedElement: the submodelRef '" + getSubmodelRef() + "' could not be found in the model.";
int errnumber = CompReplacedElementSubModelRef;
if (getTypeCode() == SBML_COMP_REPLACEDBY) {
errnumber = CompReplacedBySubModelRef;
}
doc->getErrorLog()->logPackageError("comp", errnumber, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_ATTRIBUTE_VALUE;
}
Model* inst = submod->getInstantiation();
if (inst==NULL) {
//getInstantiation sets it own error messages.
return LIBSBML_OPERATION_FAILED;
}
mReferencedElement = getReferencedElementFrom(inst);
if (mDirectReference==NULL) {
mDirectReference = mReferencedElement;
}
//getReferencedElement* set their own error messages:
if (mReferencedElement==NULL) {
return LIBSBML_OPERATION_FAILED;
}
if (mReferencedElement->getTypeCode()==SBML_COMP_PORT) {
mReferencedElement = static_cast<Port*>(mReferencedElement)->getReferencedElement();
}
if (mReferencedElement==NULL) {
return LIBSBML_OPERATION_FAILED;
}
return LIBSBML_OPERATION_SUCCESS;
}
示例6: getSBMLDocument
int
Submodel::instantiate()
{
SBMLDocument* doc = getSBMLDocument();
SBMLDocument* rootdoc = doc;
if (doc==NULL)
{
return LIBSBML_OPERATION_FAILED;
}
CompSBMLDocumentPlugin* docplugin =
static_cast<CompSBMLDocumentPlugin*>(doc->getPlugin(getPrefix()));
if (docplugin==NULL)
{
return LIBSBML_OPERATION_FAILED;
}
SBase* parent = getParentSBMLObject();
string parentmodelname = "";
string parentURI = "";
set<string> uniqueModels;
while (parent != NULL && parent->getTypeCode() != SBML_DOCUMENT) {
if (parent->getTypeCode() == SBML_COMP_SUBMODEL) {
const Submodel* parentsub = static_cast<const Submodel*>(parent);
uniqueModels.insert(parentsub->mInstantiationOriginalURI + "::" + parentsub->getModelRef());
if (parentURI=="") {
parentURI=parentsub->mInstantiationOriginalURI;
}
}
if (parent->getTypeCode() == SBML_MODEL ||
parent->getTypeCode() == SBML_COMP_MODELDEFINITION)
{
if (parentmodelname == "") {
parentmodelname = parent->getId();
}
}
rootdoc = parent->getSBMLDocument();
parent = parent->getParentSBMLObject();
}
if (mInstantiatedModel != NULL)
{
delete mInstantiatedModel;
mInstantiatedModel = NULL;
mInstantiationOriginalURI.clear();
}
if (!hasRequiredAttributes()) {
string error = "Instantiation error in Submodel::instantiate: ";
if (!isSetId()) {
error += "A submodel in model '" + getParentModel(this)->getId() + "' does not have an 'id' attribute.";
}
else if (!isSetModelRef()) {
error += "The submodel '" + getId() + "' does not have a 'modelRef' attribute.";
}
rootdoc->getErrorLog()->logPackageError("comp", CompSubmodelAllowedAttributes, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
return LIBSBML_INVALID_OBJECT;
}
SBase* origmodel = docplugin->getModel(getModelRef());
if (origmodel==NULL) {
string error = "In Submodel::instantiate, unable to instantiate submodel '" + getId() + "' because the referenced model ('" + getModelRef() +"') does not exist.";
rootdoc->getErrorLog()->logPackageError("comp", CompSubmodelMustReferenceModel, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
return LIBSBML_INVALID_OBJECT;
}
ExternalModelDefinition* extmod;
SBMLDocument* origdoc = NULL;
string newmodel = parentURI + "::" + getModelRef();
set<pair<string, string> > parents;
switch(origmodel->getTypeCode())
{
case SBML_MODEL:
case SBML_COMP_MODELDEFINITION:
origdoc = origmodel->getSBMLDocument();
mInstantiatedModel = static_cast<Model*>(origmodel)->clone();
if (uniqueModels.insert(newmodel).second == false) {
//Can't instantiate this model, because we are already a child of it.
string error = "Error in Submodel::instantiate: cannot instantiate submodel '" + getId() + "' in model '" + parentmodelname + "' because it references the model '" + getModelRef() + "', which is already an ancestor of the submodel.";
rootdoc->getErrorLog()->logPackageError("comp", CompSubmodelCannotReferenceSelf, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
return LIBSBML_OPERATION_FAILED;
}
mInstantiationOriginalURI = parentURI;
break;
case SBML_COMP_EXTERNALMODELDEFINITION:
extmod = static_cast<ExternalModelDefinition*>(origmodel);
if (extmod==NULL)
{
//No error message: it should be impossible, if origmodel has the type code 'external model definition', for it to not be castable to an external model definition.
mInstantiatedModel = NULL;
mInstantiationOriginalURI = "";
return LIBSBML_OPERATION_FAILED;
}
mInstantiatedModel = extmod->getReferencedModel(rootdoc, parents);
if (mInstantiatedModel == NULL)
{
string error = "In Submodel::instantiate, unable to instantiate submodel '" + getId() + "' because the external model definition it referenced (model '" + getModelRef() +"') could not be resolved.";
rootdoc->getErrorLog()->logPackageError("comp", CompSubmodelMustReferenceModel, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
mInstantiationOriginalURI = "";
//.........这里部分代码省略.........
示例7: getInstantiation
int Submodel::convertTimeAndExtentWith(const ASTNode* tcf, const ASTNode* xcf, const ASTNode* klmod)
{
if (tcf==NULL && xcf==NULL) return LIBSBML_OPERATION_SUCCESS;
Model* model = getInstantiation();
if (model==NULL) {
//getInstantiation sets its own error messages.
return LIBSBML_OPERATION_FAILED;
}
ASTNode tcftimes(AST_TIMES);
ASTNode tcfdiv(AST_DIVIDE);
if (tcf != NULL) {
tcftimes.addChild(tcf->deepCopy());
tcfdiv.addChild(tcf->deepCopy());
}
ASTNode rxndivide(AST_DIVIDE);
if (klmod != NULL) {
ASTNode rxnref(AST_NAME);
rxndivide.addChild(rxnref.deepCopy());
rxndivide.addChild(klmod->deepCopy());
}
List* allElements = model->getAllElements();
for (ListIterator iter = allElements->begin(); iter != allElements->end(); ++iter)
{
SBase* element = static_cast<SBase*>(*iter);
assert(element != NULL);
ASTNode* ast1 = NULL;
ASTNode* ast2 = NULL;
Constraint* constraint = NULL;
Delay* delay = NULL;
EventAssignment* ea = NULL;
InitialAssignment* ia = NULL;
KineticLaw* kl = NULL;
Priority* priority = NULL;
RateRule* rrule = NULL;
Rule* rule = NULL;
Submodel* submodel = NULL;
Trigger* trigger = NULL;
string cf = "";
//Reaction math will be converted below, in the bits with the kinetic law. But because of that, we need to handle references *to* the reaction: even if it has no kinetic law, the units have changed, and this needs to be reflected by the flattening routine.
if (rxndivide.getNumChildren() != 0 && element->getTypeCode()==SBML_REACTION && element->isSetId()) {
rxndivide.getChild(0)->setName(element->getId().c_str());
for (ListIterator iter = allElements->begin(); iter != allElements->end(); ++iter)
{
SBase* subelement = static_cast<SBase*>(*iter);
subelement->replaceSIDWithFunction(element->getId(), &rxndivide);
}
}
//Submodels need their timeConversionFactor and extentConversionFactor attributes converted. We're moving top-down, so all we need to do here is fix the conversion factor attributes themselves, pointing them to new parameters if need be.
if ((tcf !=NULL || xcf != NULL) && element->getTypeCode()==SBML_COMP_SUBMODEL) {
submodel = static_cast<Submodel*>(element);
if (tcf != NULL) {
if (submodel->isSetTimeConversionFactor()) {
createNewConversionFactor(cf, tcf, submodel->getTimeConversionFactor(), model);
submodel->setTimeConversionFactor(cf);
}
else {
submodel->setTimeConversionFactor(tcf->getName());
}
}
if (xcf != NULL) {
if (submodel->isSetExtentConversionFactor()) {
createNewConversionFactor(cf, xcf, submodel->getExtentConversionFactor(), model);
submodel->setExtentConversionFactor(cf);
}
else {
submodel->setExtentConversionFactor(xcf->getName());
}
}
}
if (tcf==NULL) {
if (klmod !=NULL && element->getTypeCode()==SBML_KINETIC_LAW) {
kl = static_cast<KineticLaw*>(element);
if (kl->isSetMath()) {
ast1 = new ASTNode(AST_TIMES);
ast1->addChild(klmod->deepCopy());
ast1->addChild(kl->getMath()->deepCopy());
kl->setMath(ast1);
delete ast1;
}
}
}
else {
// All math 'time' and 'delay' csymbols must still be converted.
// Also, several constructs are modified directly.
switch(element->getTypeCode()) {
//This would be a WHOLE LOT SIMPLER if there was a 'hasMath' class in libsbml. But even so, it would have to
// handle the kinetic laws, rate rules, and delays separately.
case SBML_KINETIC_LAW:
//Kinetic laws are multiplied by 'klmod'.
kl = static_cast<KineticLaw*>(element);
ast1 = kl->getMath()->deepCopy();
convertCSymbols(ast1, &tcfdiv, &tcftimes);
if (klmod !=NULL) {
kl = static_cast<KineticLaw*>(element);
if (kl->isSetMath()) {
ast2 = new ASTNode(AST_TIMES);
ast2->addChild(klmod->deepCopy());
ast2->addChild(ast1);
kl->setMath(ast2);
//.........这里部分代码省略.........
示例8:
void
CompIdBase::checkId (const Submodel& x)
{
if (x.isSetId()) doCheckId(x.getId(), x);
}
示例9: main
LIBSBML_CPP_NAMESPACE_USE
int main(int argc,char** argv)
{
DynPkgNamespaces sbmlns;
sbmlns.addPackageNamespace("comp", 1, "comp");
// create the document
SBMLDocument *document = new SBMLDocument(&sbmlns);
document->setPackageRequired("dyn", true);
document->setPackageRequired("comp", true);
// create the Model
Model* model=document->createModel();
model->setId("grid2x2");
// create the Compartment
Compartment* compartment = model->createCompartment();
compartment->setId("Loc1");
compartment->setConstant(false);
compartment->setSize(1);
compartment->setSpatialDimensions(2.0);
DynCompartmentPlugin* cplugin =
static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn"));
SpatialComponent* component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX);
component->setVariable("q1_X");
component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY);
component->setVariable("q1_Y");
CompSBasePlugin* compPlugin =
static_cast<CompSBasePlugin*>(compartment->getPlugin("comp"));
ReplacedElement* relement = compPlugin->createReplacedElement();
relement->setIdRef("C");
relement->setSubmodelRef("GRID_1_1_cell");
compartment = model->createCompartment();
compartment->setId("Loc2");
compartment->setConstant(false);
compartment->setSize(1);
compartment->setSpatialDimensions(2.0);
cplugin =
static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn"));
component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX);
component->setVariable("q2_X");
component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY);
component->setVariable("q2_Y");
compPlugin =
static_cast<CompSBasePlugin*>(compartment->getPlugin("comp"));
relement = compPlugin->createReplacedElement();
relement->setIdRef("C");
relement->setSubmodelRef("GRID_1_2_cell");
compartment = model->createCompartment();
compartment->setId("Loc3");
compartment->setConstant(false);
compartment->setSize(1);
compartment->setSpatialDimensions(2.0);
cplugin =
static_cast<DynCompartmentPlugin*>(compartment->getPlugin("dyn"));
component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANX);
component->setVariable("q3_X");
component = cplugin->createSpatialComponent();
component->setSpatialIndex(DYN_SPATIALKIND_CARTESIANY);
component->setVariable("q3_Y");
compPlugin =
static_cast<CompSBasePlugin*>(compartment->getPlugin("comp"));
relement = compPlugin->createReplacedElement();
relement->setIdRef("C");
relement->setSubmodelRef("GRID_2_1_cell");
compartment = model->createCompartment();
compartment->setId("Loc4");
compartment->setConstant(false);
compartment->setSize(1);
compartment->setSpatialDimensions(2.0);
cplugin =
//.........这里部分代码省略.........
示例10: getSBMLDocument
//.........这里部分代码省略.........
}
mDirectReference = port;
referent = port->getReferencedElementFrom(model);
}
else if (isSetIdRef()) {
referent = model->getElementBySId(getIdRef());
if (referent == NULL && doc) {
string error = "In SBaseRef::getReferencedElementFrom, unable to find referenced element: no such SId in the model: '" + getIdRef() + "'.";
if (doc->getErrorLog()->contains(UnrequiredPackagePresent)
|| doc->getErrorLog()->contains(RequiredPackagePresent))
{
doc->getErrorLog()->logPackageError("comp",
CompIdRefMayReferenceUnknownPackage, getPackageVersion(),
getLevel(), getVersion(), error, getLine(), getColumn());
}
else
{
doc->getErrorLog()->logPackageError("comp",
CompIdRefMustReferenceObject, getPackageVersion(),
getLevel(), getVersion(), error, getLine(), getColumn());
}
}
}
else if (isSetUnitRef()) {
referent = model->getUnitDefinition(getUnitRef());
if (referent == NULL && doc) {
string error = "In SBaseRef::getReferencedElementFrom, unable to find referenced element: no such Unit in the model: '" + getUnitRef() + "'.";
doc->getErrorLog()->logPackageError("comp", CompUnitRefMustReferenceUnitDef, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
}
else if (isSetMetaIdRef()) {
referent = model->getElementByMetaId(getMetaIdRef());
if (referent == NULL && doc) {
string error = "In SBaseRef::getReferencedElementFrom, unable to find referenced element: no such metaid in the model: '" + getMetaIdRef() + "'.";
if (doc->getErrorLog()->contains(UnrequiredPackagePresent)
|| doc->getErrorLog()->contains(RequiredPackagePresent))
{
doc->getErrorLog()->logPackageError("comp",
CompIdRefMayReferenceUnknownPackage, getPackageVersion(),
getLevel(), getVersion(), error, getLine(), getColumn());
}
else
{
doc->getErrorLog()->logPackageError("comp",
CompMetaIdRefMustReferenceObject, getPackageVersion(),
getLevel(), getVersion(), error, getLine(), getColumn());
}
}
}
else {
//This is actually possible if the subclass overrides getNumReferents() (which some do). In that case, we just return NULL and let the overriding function find the referent instead.
return NULL;
}
if (referent == NULL) {
//No need to set an error message--one was already set above.
return NULL;
}
if (isSetSBaseRef()) {
//We're drilling into the submodels here, so our referent must be a submodel.
if (referent->getTypeCode() != SBML_COMP_SUBMODEL) {
if (doc) {
string error = "In SBaseRef::getReferencedElementFrom, unable to find referenced element: the element ";
if (referent->isSetId()) {
error += "'" + referent->getId() + "'";
}
else if (referent->isSetMetaId()) {
error += "with the metaid '" + referent->getMetaId() + "'";
}
error += " is not a submodel, and therefore has no subobjects for the child <sBaseRef> to refer to.";
doc->getErrorLog()->logPackageError("comp", CompParentOfSBRefChildMustBeSubmodel, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return NULL;
}
Submodel* subm = static_cast<Submodel*>(referent);
if (subm==NULL) {
//Note: should be impossible.
if (doc) {
string error = "In SBaseRef::getReferencedElementFrom, unable to find referenced element: the element ";
if (referent->isSetId()) {
error += "'" + referent->getId() + "' ";
}
else if (referent->isSetMetaId()) {
error += "with the metaid '" + referent->getMetaId() + "' ";
}
error += "claims to be a Submodel, but could not be programmatically turned into one.";
doc->getErrorLog()->logPackageError("comp", CompParentOfSBRefChildMustBeSubmodel, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return NULL;
}
Model* inst = subm->getInstantiation();
if (inst==NULL) {
//No need to set an additional error, as 'getInstantiation' will set one itself.
return NULL;
}
//Recursive, so will set its own error messages:
referent = getSBaseRef()->getReferencedElementFrom(inst);
mDirectReference = getSBaseRef()->getDirectReference();
}
return referent;
}