31 mVariables(
"Function Parameters", this),
32 mCallParametersBegin(),
43 mVariables(src.mVariables, this),
44 mCallParametersBegin(src.mCallParametersBegin),
45 mReversible(src.mReversible)
86 std::vector< CEvaluationNode * >::const_iterator it =
mpNodeList->begin();
87 std::vector< CEvaluationNode * >::const_iterator end =
mpNodeList->end();
89 for (; it != end; ++it)
121 if (!(*static_cast< const CEvaluationTree * >(
this) == rhs))
124 if (!(*static_cast< const CAnnotation * >(
this) == rhs))
174 while (it != end && parameter != it->value) it++;
190 configBuffer.
getVariable(
"User-defined",
"C_INT32", &Type, mode);
208 configBuffer.
getVariable(
"FunctionName",
"string", &tmp, mode);
211 configBuffer.
getVariable(
"Description",
"string", &tmp);
228 std::vector< CEvaluationNode * >::iterator it =
mpNodeList->begin();
229 std::vector< CEvaluationNode * >::iterator end =
mpNodeList->end();
231 for (; it != end; ++it)
237 NewVariables.
add((*it)->getData(),
255 const size_t noProducts,
304 const size_t & added)
308 size_t i, imax = list.size();
312 std::vector< CEvaluationNode * >::const_iterator it;
313 std::vector< CEvaluationNode * >::const_iterator end;
318 for (i = (added) ? imax - added : 0; i < imax; i++)
326 list.end() == std::find(list.begin(), list.end(), Functions[Index]))
328 list.push_back(Functions[Index]);
347 for (i = 0; i < imax; ++i)
355 bool expand,
bool fullExpand)
const
357 std::ostringstream out;
363 if (flag) out <<
"<mfenced>" << std::endl;
367 if (flag) out <<
"</mfenced>" << std::endl;
371 out <<
"<mrow>" << std::endl;
373 out <<
"<mfenced>" << std::endl;
375 size_t i, imax = variables.size();
377 for (i = 0; i < imax; ++i)
379 out << variables[i][0] << std::endl;
382 out <<
"</mfenced>" << std::endl;
383 out <<
"</mrow>" << std::endl;
393 out <<
SPC(l) <<
"<mrow>" << std::endl;
395 out <<
SPC(l + 1) <<
"<mfenced>" << std::endl;
399 for (i = 0; i < imax; ++i)
404 out <<
SPC(l + 1) <<
"</mfenced>" << std::endl;
405 out <<
SPC(l) <<
"</mrow>" << std::endl;
417 os <<
"(irreversible)";
419 os <<
"(reversible)";
446 const std::string & name1,
447 const std::string & name2)
const
455 newFunction1->setObjectName(name1);
463 std::vector<CFunctionAnalyzer::CValue> callParameters;
468 if (!splitnode)
return std::pair<CFunction *, CFunction *>((
CFunction*)NULL, (
CFunction*)NULL);
475 newFunction1->setRoot(tmpRoots1);
478 newFunction2->
setRoot(tmpRoots2);
481 newFunction1->initVariables();
482 newFunction1->mReversible =
TriFalse;
491 imax = newFunction1->mVariables.size();
493 for (i = 0; i < imax; ++i)
501 for (i = 0; i < imax; ++i)
509 newFunction1->compile();
511 return std::pair<CFunction *, CFunction *>(newFunction1, newFunction2);
bool remove(const std::string &key)
void setType(const CEvaluationTree::Type &type)
CCopasiVectorN< CFunction > & loadedFunctions()
virtual bool setRoot(CEvaluationNode *pRootNode)
const_iterator begin() const
const CEvaluationNode * findTopMinus(const std::vector< CFunctionAnalyzer::CValue > &callParameters) const
CEvaluationNode * copyBranch() const
static bool completeFunctionList(std::vector< CFunction * > &list, const size_t &added=0)
virtual bool dependsOn(const C_FLOAT64 *parameter, const CCallParameters< C_FLOAT64 > &callParameters) const
bool operator==(const CFunction &rhs) const
CFunctionParameters mVariables
std::vector< CEvaluationNode * > * mpNodeList
virtual size_t getVariableIndex(const std::string &name) const
const std::string & getObjectName() const
std::ostream & operator<<(std::ostream &os, const CFunction &f)
bool isVector(CFunctionParameter::Role role) const
static std::string fixName(const std::string &name)
size_t findParameterByName(const std::string &name, CFunctionParameter::DataType &dataType) const
size_t getNumberOfParametersByUsage(CFunctionParameter::Role usage) const
bool isSuitable(const size_t noSubstrates, const size_t noProducts, const TriLogic reversible)
bool addVariable(const std::string &name, CFunctionParameter::Role usage=CFunctionParameter::VARIABLE, const CFunctionParameter::DataType &type=CFunctionParameter::FLOAT64)
virtual size_t getIndex(const std::string &name) const
void setMiriamAnnotation(const std::string &miriamAnnotation, const std::string &newId, const std::string &oldId)
virtual bool setInfix(const std::string &infix)
const std::string & getKey() const
const std::string & getMiriamAnnotation() const
void setReversible(const TriLogic &reversible)
static void constructCallParameters(const CFunctionParameters &fp, std::vector< CValue > &callParameters, bool posi)
static Type type(const Type &type)
void add(const CFunctionParameter ¶meter)
const TriLogic & isReversible() const
void setSBMLId(const std::string &id)
virtual void load(CReadConfig &configBuffer, CReadConfig::Mode mode=CReadConfig::SEARCH)
std::pair< CFunction *, CFunction * > splitFunction(const CEvaluationNode *node, const std::string &name1, const std::string &name2) const
virtual void writeMathML(std::ostream &out, size_t l=0) const
void remove(const std::string &name)
virtual const C_FLOAT64 & getVariableValue(const size_t &index) const
void createListOfParametersForMathML(std::vector< std::vector< std::string > > &env)
std::string add(const std::string &prefix, CCopasiObject *pObject)
static CFunctionDB * getFunctionList()
virtual const C_FLOAT64 & calcValue(const CCallParameters< C_FLOAT64 > &callParameters)
std::string buildMMLString(bool expand, const std::vector< std::vector< std::string > > &variables) const
static Type subType(const Type &type)
static CKeyFactory * getKeyFactory()
CFunction(const std::string &name="NoName", const CCopasiContainer *pParent=NULL, const Type &type=Function)
const std::string & getSBMLId() const
CFunction * createCopy() const
CCallParameters< C_FLOAT64 >::const_iterator mCallParametersBegin
The class for handling a chemical kinetic function.
const_iterator end() const
C_INT32 getVariable(const std::string &name, const std::string &type, void *pout, CReadConfig::Mode mode=CReadConfig::NEXT)
bool setObjectName(const std::string &name)
const std::vector< CEvaluationNode * > & getNodeList() const
CEvaluationNode * splitBranch(const CEvaluationNode *splitnode, bool left) const
const std::string & getInfix() const
CFunctionParameters & getVariables()
virtual bool setInfix(const std::string &infix)
virtual const std::string & getKey() const