本文整理汇总了C++中SBase类的典型用法代码示例。如果您正苦于以下问题:C++ SBase类的具体用法?C++ SBase怎么用?C++ SBase使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SBase类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: logFailure
void
AssignmentRuleOrdering::logForwardReference (const ASTNode & node,
const SBase& object,
std::string name)
{
char * formula = SBML_formulaToString(&node);
msg =
"The AssignmentRule with variable '";
msg += object.getId();
msg += "' refers to the variable '";
msg += name;
msg += "' within the math formula '";
msg += formula;
msg += "'. '";
msg += name;
msg += "' is the subject of a later assignment rule.";
safe_free(formula);
logFailure(object);
}
示例2: getSBMLDocument
int ReplacedBy::performReplacementAndCollect(set<SBase*>* removed, set<SBase*>* toremove)
{
SBMLDocument* doc = getSBMLDocument();
//Find the various objects and plugin objects we need for this to work.
SBase* parent = getParentSBMLObject();
if (parent==NULL) {
if (doc) {
string error = "Unable to perform replacement in ReplacedBy::performReplacement: no parent object for this <replacedBy> could be found.";
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_OBJECT;
}
SBase* ref = getReferencedElement();
if (ref==NULL) {
//getReferencedElement sets its own error messages.
return LIBSBML_INVALID_OBJECT;
}
//Update the IDs. (Will set its own error messages.)
int ret = updateIDs(ref, parent);
//ReplacedBy elements do get the name of the top-level element, assuming it has one:
if (parent->isSetId()) {
ref->setId(parent->getId());
}
if (parent->isSetMetaId()) {
ref->setMetaId(parent->getMetaId());
}
if (ret != LIBSBML_OPERATION_SUCCESS) return ret;
//And finally, get ready to delete the parent object.
if (toremove) {
toremove->insert(parent);
}
return LIBSBML_OPERATION_SUCCESS;
}
示例3: getPort
/** @cond doxygenLibsbmlInternal */
void CompModelPlugin::resetPorts()
{
for (unsigned int p=0; p<getNumPorts(); p++) {
Port* port = getPort(p);
SBase* referenced = port->getReferencedElement();
if (port->isSetSBaseRef()) {
port->unsetSBaseRef();
port->unsetIdRef();
port->unsetMetaIdRef();
port->unsetUnitRef();
int type = referenced->getTypeCode();
if (referenced->isSetId() &&
type != SBML_INITIAL_ASSIGNMENT &&
type != SBML_ASSIGNMENT_RULE &&
type != SBML_RATE_RULE &&
type != SBML_EVENT_ASSIGNMENT) {
if (type==SBML_UNIT_DEFINITION) {
port->setUnitRef(referenced->getId());
}
else {
port->setIdRef(referenced->getId());
}
}
else if (referenced->isSetMetaId()) {
port->setMetaIdRef(referenced->getMetaId());
}
else {
stringstream newname;
newname << "auto_port_" << p;
referenced->setMetaId(newname.str());
port->setMetaIdRef(newname.str());
}
}
port->clearReferencedElement();
}
}
示例4: while
std::string SEDMLUtils::findIdByNameAndType(
const std::map<CCopasiObject*, SBase*>& map,
int typeCode,
const std::string& name)
{
std::map<CCopasiObject*, SBase*>::const_iterator it = map.begin();
std::string::size_type compartmentStart = name.find("{");
std::string nameOnly = name.substr(0, compartmentStart);
while (it != map.end())
{
SBase* current = it->second;
if (((current->getTypeCode() & typeCode) == typeCode) &&
current->getName() == name)
return current->getId();
if (typeCode == SBML_SPECIES && compartmentStart != std::string::npos)
{
if (((current->getTypeCode() & typeCode) == typeCode) &&
current->getName() == nameOnly)
{
std::string compName = name.substr(compartmentStart + 1, name.size() - compartmentStart - 2);
std::string compId = findIdByNameAndType(map, SBML_COMPARTMENT, compName);
Species* species = (Species*) current;
if (species->getCompartment() == compId)
return species->getId();
}
}
++it;
}
return "";
}
示例5: getParentSBMLObject
/** @cond doxygenLibsbmlInternal */
SBase*
CompSBasePlugin::createObject(XMLInputStream& stream)
{
SBase* object = 0;
const std::string& name = stream.peek().getName();
const XMLNamespaces& xmlns1 = stream.peek().getNamespaces();
const std::string& prefix = stream.peek().getPrefix();
const std::string& targetPrefix = (xmlns1.hasURI(mURI)) ? xmlns1.getPrefix(mURI) : mPrefix;
const SBase* parent = getParentSBMLObject();
string message = "";
if (parent) {
message = "The <" + parent->getElementName() + "> ";
if (parent->isSetId()) { //LS DEBUG
message += "with the id '" + parent->getId() + "' ";
}
}
if (prefix == targetPrefix)
{
if ( name == "listOfReplacedElements" )
{
if (mListOfReplacedElements != NULL)
{
getErrorLog()->logPackageError("comp", CompOneListOfReplacedElements,
getPackageVersion(), getLevel(), getVersion(), message + "may only have one <listOfReplacedElements>");
}
createListOfReplacedElements();
object = mListOfReplacedElements;
if (targetPrefix.empty())
{
//
// (NOTE)
//
// A top-level element (listOfReplacedElements) of the comp extension is located
// in a default namespace, and thus xmlns=".." attribute must be added to
// the element.
// This is done by invoking SBMLDocument::enableDefaultNS() function with
// the two arguments (the URI of this package and true value).
//
mListOfReplacedElements->getSBMLDocument()->enableDefaultNS(mURI,true);
}
}
if ( name == "replacedBy" ) {
if (mReplacedBy != NULL)
{
if (mSBML != NULL && getErrorLog() != NULL)
{
getErrorLog()->logPackageError("comp", CompOneReplacedByElement,
getPackageVersion(), getLevel(), getVersion(), message + "may only have one <replacedBy> child.");
}
}
delete mReplacedBy;
COMP_CREATE_NS(compns, getSBMLNamespaces());
mReplacedBy = new ReplacedBy(compns);
object = mReplacedBy;
object->connectToParent(getParentSBMLObject());
delete compns;
}
}
return object;
}
示例6: getSBMLDocument
int CompModelPlugin::collectRenameAndConvertReplacements(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 perform replacements in CompModelPlugin::collectRenameAndConvertReplacements: 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;
}
List* allElements = model->getAllElements();
vector<ReplacedElement*> res;
vector<ReplacedBy*> rbs;
//Collect replaced elements and replaced by's.
for (unsigned int e=0; e<allElements->getSize(); e++) {
SBase* element = static_cast<SBase*>(allElements->get(e));
int type = element->getTypeCode();
if (type==SBML_COMP_REPLACEDELEMENT) {
ReplacedElement* reference = static_cast<ReplacedElement*>(element);
res.push_back(reference);
}
if (type==SBML_COMP_REPLACEDBY) {
ReplacedBy* reference = static_cast<ReplacedBy*>(element);
rbs.push_back(reference);
}
}
delete allElements;
//ReplacedElement replacements
for (size_t re=0; re<res.size(); re++) {
ret = res[re]->performReplacementAndCollect(removed, toremove);
if (ret != LIBSBML_OPERATION_SUCCESS) {
return ret;
}
}
//Now do the same thing for anything left over in the submodels
for (unsigned int sub=0; sub<getNumSubmodels(); sub++) {
Submodel* submodel = getSubmodel(sub);
Model* mod = submodel->getInstantiation();
if (mod==NULL) return LIBSBML_OPERATION_FAILED;
CompModelPlugin* modplug = static_cast<CompModelPlugin*>(mod->getPlugin(getPrefix()));
if (modplug==NULL) return LIBSBML_OPERATION_FAILED;
//'left behind' converions (not LaHaye-style)
ret = submodel->convertTimeAndExtent();
if (ret != LIBSBML_OPERATION_SUCCESS) return ret;
ret = modplug->collectRenameAndConvertReplacements(removed, toremove);
if (ret != LIBSBML_OPERATION_SUCCESS) return ret;
}
//Perform ReplacedBy replacements *after* the submodels are done, so that the topmost-level names take precedence.
for (size_t rb=0; rb<rbs.size(); rb++) {
ret = rbs[rb]->performReplacementAndCollect(removed, toremove);
if (ret != LIBSBML_OPERATION_SUCCESS) {
return ret;
}
}
return ret;
}
示例7: getSBMLDocument
/** @cond doxygenLibsbmlInternal */
int
Replacing::updateIDs(SBase* oldnames, SBase* newnames)
{
int ret = LIBSBML_OPERATION_SUCCESS;
SBMLDocument* doc = getSBMLDocument();
if (oldnames->isSetId() && !newnames->isSetId()) {
if (doc) {
string error = "Unable to transform IDs in Replacing::updateIDs during replacement: the '" + oldnames->getId() + "' element's replacement does not have an ID set.";
doc->getErrorLog()->logPackageError("comp", CompMustReplaceIDs, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_OBJECT;
}
if (oldnames->isSetMetaId() && !newnames->isSetMetaId()) {
if (doc) {
string error = "Unable to transform IDs in Replacing::updateIDs during replacement: the replacement of the element with metaid '" + oldnames->getMetaId() + "' does not have a metaid.";
doc->getErrorLog()->logPackageError("comp", CompMustReplaceMetaIDs, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_OBJECT;
}
//LS DEBUG Somehow we need to check identifiers from other packages here (like spatial id's). How, exactly, is anyone's guess.
Model* replacedmod = const_cast<Model*>(CompBase::getParentModel(oldnames));
KineticLaw* replacedkl;
ASTNode newkl;
if (replacedmod==NULL) {
if (doc) {
string error = "Unable to transform IDs in Replacing::updateIDs during replacement: the replacement of '" + oldnames->getId() + "' does not have a valid model.";
doc->getErrorLog()->logPackageError("comp", CompModelFlatteningFailed, getPackageVersion(), getLevel(), getVersion(), error, getLine(), getColumn());
}
return LIBSBML_INVALID_OBJECT;
}
List* allElements = replacedmod->getAllElements();
string oldid = oldnames->getId();
string newid = newnames->getId();
if (!oldid.empty()) {
switch(oldnames->getTypeCode()) {
case SBML_UNIT_DEFINITION:
replacedmod->renameUnitSIdRefs(oldid, newid);
for (unsigned int e=0; e<allElements->getSize(); e++) {
SBase* element = static_cast<SBase*>(allElements->get(e));
element->renameUnitSIdRefs(oldid, newid);
}
break;
case SBML_LOCAL_PARAMETER:
replacedkl = static_cast<KineticLaw*>(oldnames->getAncestorOfType(SBML_KINETIC_LAW));
if (replacedkl->isSetMath()) {
newkl = *replacedkl->getMath();
newkl.renameSIdRefs(oldid, newid);
replacedkl->setMath(&newkl);
}
break;
case SBML_COMP_PORT:
break;
//LS DEBUG And here is where we would need some sort of way to check if the id wasn't an SId for some objects.
default:
replacedmod->renameSIdRefs(oldnames->getId(), newnames->getId());
for (unsigned int e=0; e<allElements->getSize(); e++) {
SBase* element = static_cast<SBase*>(allElements->get(e));
element->renameSIdRefs(oldid, newid);
}
}
}
string oldmetaid = oldnames->getMetaId();
string newmetaid = newnames->getMetaId();
if (oldnames->isSetMetaId()) {
replacedmod->renameMetaIdRefs(oldmetaid, newmetaid);
for (unsigned int e=0; e<allElements->getSize(); e++) {
SBase* element = static_cast<SBase*>(allElements->get(e));
element->renameMetaIdRefs(oldmetaid, newmetaid);
}
}
//LS DEBUG And here is where we would need some sort of way to check for ids that were not 'id' or 'metaid'.
delete allElements;
return ret;
}
示例8: 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 = "";
//.........这里部分代码省略.........
示例9: getParentSBMLObject
/*
* Constructs and returns a UnitDefinition that expresses the units of this
* Parameter.
*/
UnitDefinition *
Parameter::getDerivedUnitDefinition()
{
/* if we have the whole model but it is not in a document
* it is still possible to determine the units
*/
Model * m = static_cast <Model *> (getAncestorOfType(SBML_MODEL));
if (m != NULL)
{
if (!m->isPopulatedListFormulaUnitsData())
{
m->populateListFormulaUnitsData();
}
/* need to distinguish between a global and local parameter
* for a global parameter a unit definition will have been created
* for a local parameter need to create one based on the units field
*/
bool globalParameter = false;
SBase *parent = getParentSBMLObject();
SBase *pparent = (parent) ? parent->getParentSBMLObject() : NULL;
if (pparent != NULL && dynamic_cast<Model*>(pparent) != 0)
globalParameter = true;
if (globalParameter)
{
if (m->getFormulaUnitsData(getId(), getTypeCode()) != NULL)
{
return m->getFormulaUnitsData(getId(), getTypeCode())
->getUnitDefinition();
}
else
{
return NULL;
}
}
else
{
UnitDefinition *ud = NULL;
const char * units = getUnits().c_str();
if (!strcmp(units, ""))
{
ud = new UnitDefinition(getSBMLNamespaces());
return ud;
}
else
{
if (UnitKind_isValidUnitKindString(units,
getLevel(), getVersion()))
{
Unit * unit = new Unit(getSBMLNamespaces());
unit->setKind(UnitKind_forName(units));
unit->initDefaults();
ud = new UnitDefinition(getSBMLNamespaces());
ud->addUnit(unit);
delete unit;
}
else
{
/* must be a unit definition */
ud = static_cast <Model *> (getAncestorOfType(SBML_MODEL))->getUnitDefinition(units);
}
return ud;
}
}
}
else
{
return NULL;
}
}
示例10: CPPUNIT_ASSERT
// tests whether we are importing global render information
void test000098::test_export_notes()
{
CPPUNIT_ASSERT(pDataModel != NULL);
std::istringstream iss(test000098::CPS_MODEL_1);
CPPUNIT_ASSERT(load_cps_model_from_stream(iss, *pDataModel) == true);
std::string s;
try
{
s = pDataModel->exportSBMLToString(NULL, 2, 1);
}
catch (...)
{
CPPUNIT_ASSERT(false);
}
CPPUNIT_ASSERT(!s.empty());
SBMLReader reader;
SBMLDocument* pSBMLDocument = NULL;
try
{
pSBMLDocument = reader.readSBMLFromString(s);
}
catch (...)
{
CPPUNIT_ASSERT(false);
}
CPPUNIT_ASSERT(pSBMLDocument != NULL);
Model* pModel = pSBMLDocument->getModel();
CPPUNIT_ASSERT(pModel != NULL);
CPPUNIT_ASSERT(pModel->isSetNotes() == true);
std::string notes = pModel->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on model") != std::string::npos);
CPPUNIT_ASSERT(pModel->getNumCompartments() == 1);
CPPUNIT_ASSERT(pModel->getNumSpecies() == 1);
CPPUNIT_ASSERT(pModel->getNumParameters() == 1);
CPPUNIT_ASSERT(pModel->getNumReactions() == 1);
CPPUNIT_ASSERT(pModel->getNumEvents() == 1);
// compartment
SBase* pObject = pModel->getCompartment(0);
CPPUNIT_ASSERT(pObject != NULL);
CPPUNIT_ASSERT(pObject->isSetNotes() == true);
notes = pObject->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on compartment") != std::string::npos);
// species
pObject = pModel->getSpecies(0);
CPPUNIT_ASSERT(pObject != NULL);
CPPUNIT_ASSERT(pObject->isSetNotes() == true);
notes = pObject->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on species") != std::string::npos);
// parameter
pObject = pModel->getParameter(0);
CPPUNIT_ASSERT(pObject != NULL);
CPPUNIT_ASSERT(pObject->isSetNotes() == true);
notes = pObject->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on parameter") != std::string::npos);
// reaction
pObject = pModel->getReaction(0);
CPPUNIT_ASSERT(pObject != NULL);
CPPUNIT_ASSERT(pObject->isSetNotes() == true);
notes = pObject->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on reaction") != std::string::npos);
// event
pObject = pModel->getEvent(0);
CPPUNIT_ASSERT(pObject != NULL);
CPPUNIT_ASSERT(pObject->isSetNotes() == true);
notes = pObject->getNotesString();
CPPUNIT_ASSERT(!notes.empty());
CPPUNIT_ASSERT(notes.find("Simple note on event") != std::string::npos);
}
示例11: currentIds
int
SBMLIdConverter::convert()
{
if (mDocument == NULL) return LIBSBML_INVALID_OBJECT;
Model* mModel = mDocument->getModel();
if (mModel == NULL) return LIBSBML_INVALID_OBJECT;
// nothing to do
if (!mProps->hasOption("currentIds") || !mProps->hasOption("newIds"))
return LIBSBML_OPERATION_SUCCESS;
bool success = true;
IdList currentIds(mProps->getOption("currentIds")->getValue());
IdList newIds(mProps->getOption("newIds")->getValue());
// if the size does not match something is wrong.
if (newIds.size() != currentIds.size())
return LIBSBML_UNEXPECTED_ATTRIBUTE;
List* allElements = mDocument->getAllElements();
std::map<std::string, std::string> renamed;
// rename ids
for (unsigned int i = 0; i < allElements->getSize(); ++i)
{
SBase* current = static_cast<SBase*>(allElements->get(i));
if (current == NULL || !current->isSetId()
|| current->getTypeCode() == SBML_LOCAL_PARAMETER)
continue;
for (unsigned int j = 0; j < currentIds.size(); ++j)
{
if (current->getId() != currentIds.at((int)j))
continue;
// return error code in case new id is invalid
if (!SyntaxChecker::isValidSBMLSId(newIds.at((int)j)))
{
delete allElements;
return LIBSBML_INVALID_ATTRIBUTE_VALUE;
}
current->setId(newIds.at((int)j));
renamed[currentIds.at((int)j)] = newIds.at((int)j);
break;
}
}
// update all references that we changed
std::map<std::string, std::string>::const_iterator it;
for (unsigned int i = 0; i < allElements->getSize(); ++i)
{
SBase* current = static_cast<SBase*>(allElements->get(i));
for (it = renamed.begin(); it != renamed.end(); ++it)
{
current->renameSIdRefs(it->first, it->second);
}
}
delete allElements;
if (success) return LIBSBML_OPERATION_SUCCESS;
return LIBSBML_OPERATION_FAILED;
}
示例12: CCopasiMessage
//static
void SBMLUtils::collectIds(Model* pModel, std::map<std::string, const SBase*>& ids, std::map<std::string, const SBase*>& metaIds)
{
if (pModel != NULL)
{
// the model itself
SBase* pSBase = NULL;
std::string id;
if (pModel->isSetId())
{
id = pModel->getId();
if (ids.find(id) == ids.end())
{
ids.insert(std::pair<const std::string, const SBase*>(id, pModel));
}
else
{
CCopasiMessage(CCopasiMessage::EXCEPTION, MCSBML + 68, id.c_str());
}
}
if (pModel->isSetMetaId())
{
id = pModel->getMetaId();
if (metaIds.find(id) == metaIds.end())
{
metaIds.insert(std::pair<const std::string, const SBase*>(id, pModel));
}
else
{
CCopasiMessage(CCopasiMessage::WARNING, MCSBML + 67, id.c_str());
}
}
// ListOfFunctionDefinitions
pSBase = pModel->getListOfFunctionDefinitions();
if (pSBase != NULL)
{
if (pSBase->isSetId())
{
id = pSBase->getId();
if (ids.find(id) == ids.end())
{
ids.insert(std::pair<const std::string, const SBase*>(id, pModel));
}
else
{
CCopasiMessage(CCopasiMessage::EXCEPTION, MCSBML + 68, id.c_str());
}
}
if (pSBase->isSetMetaId())
{
id = pSBase->getMetaId();
if (metaIds.find(id) == metaIds.end())
{
metaIds.insert(std::pair<const std::string, const SBase*>(id, pModel));
}
else
{
CCopasiMessage(CCopasiMessage::WARNING, MCSBML + 67, id.c_str());
}
}
// all FunctionDefinitions
unsigned int i, iMax = pModel->getListOfFunctionDefinitions()->size();
for (i = 0; i < iMax; ++i)
{
pSBase = pModel->getListOfFunctionDefinitions()->get(i);
if (pSBase->isSetId())
{
id = pSBase->getId();
if (ids.find(id) == ids.end())
{
ids.insert(std::pair<const std::string, const SBase*>(id, pSBase));
}
else
{
CCopasiMessage(CCopasiMessage::EXCEPTION, MCSBML + 68, id.c_str());
}
}
if (pSBase->isSetMetaId())
{
id = pSBase->getMetaId();
if (metaIds.find(id) == metaIds.end())
{
metaIds.insert(std::pair<const std::string, const SBase*>(id, pSBase));
}
else
//.........这里部分代码省略.........
示例13:
bool UniPAX::SBase::merge(SBase& object)
{
if (metaId.empty())
{
metaId = object.getMetaId();
}
else
{
if (metaId.compare(object.getMetaId()) != 0)
{
std::cerr << "Error during merging: UniPAX::SBase::metaId not equal ..."
<< metaId << " != " << object.getMetaId() << std::endl;
return false;
}
}
if (sboTerm.empty())
{
sboTerm = object.getSboTerm();
}
else
{
if (sboTerm.compare(object.getSboTerm()) != 0)
{
std::cerr << "Error during merging: UniPAX::SBase::sboTerm not equal ..."
<< sboTerm << " != " << object.getSboTerm() << std::endl;
return false;
}
}
if (notes.empty())
{
notes = object.getNotes();
}
else
{
if (notes.compare(object.getNotes()) != 0)
{
std::cerr << "Error during merging: UniPAX::SBase::notes not equal ..."
<< notes << " != " << object.getNotes() << std::endl;
return false;
}
}
if (annotation.empty())
{
annotation = object.getAnnotation();
}
else
{
if (annotation.compare(object.getAnnotation()) != 0)
{
std::cerr << "Error during merging: UniPAX::SBase::annotation not equal ..."
<< annotation << " != " << object.getAnnotation() << std::endl;
return false;
}
}
// if (unipaxSource != 0)
// {
// if (object.getUnipaxSource() != 0)
// {
//
// if (unipaxSource->getUnipaxId() != object.getUnipaxSource()->getUnipaxId())
// {
// std::cerr << "Error during merging: UniPAX::SBase::unipaxSource not equal ..."
// << unipaxSource->getUnipaxId() << " != " << object.getUnipaxSource()->getUnipaxId() << std::endl;
// return false;
// }
// }
// }
// else
// {
// unipaxSource = object.getUnipaxSource();
// }
return UniPAX::UIBase::merge(object);
}
示例14: main
LIBSBML_CPP_NAMESPACE_USE
BEGIN_C_DECLS
int
main (int argc, char* argv[])
{
if (argc != 5)
{
cout << endl << "Usage: renameSId filename oldSId newSId output" << endl << endl;
return 1;
}
const char* filename = argv[1];
const char* oldSId = argv[2];
const char* newSId = argv[3];
const char* output = argv[4];
if (strcmp(oldSId, newSId) == 0)
{
cout << "The Ids are identical, renaming stopped." << endl;
return 1;
}
if (!SyntaxChecker::isValidInternalSId(newSId))
{
cout << "The new SId '" << newSId
<< "' does not represent a valid SId."
<< endl;
return 1;
}
SBMLDocument* document;
SBMLReader reader;
#ifdef __BORLANDC__
unsigned long start, stop;
#else
unsigned long long start, stop;
#endif
start = getCurrentMillis();
document = reader.readSBML(filename);
stop = getCurrentMillis();
unsigned int errors = document->getNumErrors(LIBSBML_SEV_ERROR);
cout << endl;
cout << " filename: " << filename << endl;
cout << " file size: " << getFileSize(filename) << endl;
cout << " read time (ms): " << stop - start << endl;
cout << " error(s): " << errors << endl;
cout << endl;
if (errors > 0)
{
document->printErrors(cerr);
delete document;
return errors;
}
// find elements for old id
SBase* element = document->getElementBySId(oldSId);
if (element == NULL)
{
cout << "Found no element with SId '"
<< oldSId << "'." << endl;
return 1;
}
// found element --> renaming
element->setId(newSId);
// update all references to this element
List *allElements = document->getAllElements();
for (unsigned int i = 0; i < allElements->getSize(); ++i)
static_cast<SBase*>(allElements->get(i))->renameSIdRefs(oldSId, newSId);
// write to file
writeSBMLToFile(document, output);
delete document;
return errors;
}
示例15: START_TEST
END_TEST
START_TEST (test_GetMultipleObjects_getMetaId)
{
SBMLReader reader;
SBMLDocument* d;
std::string filename(TestDataDirectory);
filename += "multiple-ids.xml";
d = reader.readSBML(filename);
if (d == NULL)
{
fail("readSBML(\"multiple-ids.xml\") returned a NULL pointer.");
}
SBase* obj = d->getElementByMetaId("no_id");
fail_unless(obj == NULL);
obj = d->getElementByMetaId("");
fail_unless(obj == NULL);
obj = d->getElementByMetaId("meta1");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_DOCUMENT);
obj = d->getElementByMetaId("meta2");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_MODEL);
obj = d->getElementByMetaId("meta3");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_COMPARTMENT);
obj = d->getElementByMetaId("meta4");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_COMPARTMENT);
obj = d->getElementByMetaId("meta5");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_SPECIES);
obj = d->getElementByMetaId("meta6");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_SPECIES);
obj = d->getElementByMetaId("meta7");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_REACTION);
obj = d->getElementByMetaId("meta8");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_REACTION);
obj = d->getElementByMetaId("meta9");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_SPECIES_REFERENCE);
obj = d->getElementByMetaId("meta10");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_SPECIES_REFERENCE);
obj = d->getElementByMetaId("meta11");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_KINETIC_LAW);
obj = d->getElementByMetaId("meta12");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_EVENT);
obj = d->getElementByMetaId("meta13");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_EVENT);
obj = d->getElementByMetaId("meta14");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_TRIGGER);
obj = d->getElementByMetaId("meta15");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_LIST_OF);
fail_unless(static_cast<ListOf*>(obj)->getItemTypeCode() == SBML_EVENT_ASSIGNMENT);
obj = d->getElementByMetaId("meta16");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_EVENT_ASSIGNMENT);
obj = d->getElementByMetaId("meta17");
fail_unless(obj != NULL);
fail_unless(obj->getTypeCode() == SBML_DELAY);
obj = d->getElementByMetaId("meta18");
//.........这里部分代码省略.........