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; }
void CompIdBase::checkId (const Submodel& x) { if (x.isSetId()) doCheckId(x.getId(), x); }