16 mRoot(
"Expression", this),
21 mLastToggleTime(std::numeric_limits<
C_FLOAT64 >::quiet_NaN())
29 mRoot(src.mRoot, this),
31 mEquality(src.mEquality),
32 mDiscrete(src.mDiscrete),
34 mLastToggleTime(src.mLastToggleTime)
45 (
C_FLOAT64 *)mRoot.getObject(std::string(
"Reference=Value"))->getValuePointer();
55 success &= mRoot.compile(listOfContainer);
62 mDiscrete = !mRoot.dependsOn(stateVariables);
88 return pTrueExpression;
92 const bool & equality,
93 const bool & continous)
100 !isnan(mLastToggleTime) &&
101 mLastToggleTime == time)
109 mTrue = (mTrue > 0.5) ? 0.0 : 1.0;
110 mLastToggleTime = time;
114 if (equality == mEquality && mTrue < 0.5)
117 mLastToggleTime = time;
119 else if (equality != mEquality && mTrue > 0.5)
122 mLastToggleTime = time;
135 mTrue = (mTrue > 0.5) ? 0.0 : 1.0;
136 mLastToggleTime = time;
144 mLastToggleTime = std::numeric_limits< C_FLOAT64 >::quiet_NaN();
149 if ((*mpRootValue < 0.0) ||
150 ((*mpRootValue <= 0.0) && !mEquality))
175 mTrueExpression(src.mTrueExpression, this),
176 mRootFinders(src.mRootFinders, this),
177 mFunctionVariableMap()
189 for (; itRoot != endRoot; ++itRoot)
191 (*itRoot)->applyInitialValues();
201 for (; itRoot != endRoot; ++itRoot)
203 (*itRoot)->calculateTrueValue();
213 std::vector< CCopasiContainer * > listOfContainer)
215 if (pTriggerExpression == NULL)
232 bool success =
compile(pRoot, pTrueExpression);
242 for (; it != end; ++it)
244 success &= (*it)->compile(listOfContainer);
274 success =
compileOR(pNode, pTrueExpression);
282 success =
compileEQ(pNode, pTrueExpression);
286 success =
compileNE(pNode, pTrueExpression);
290 success =
compileLE(pNode, pTrueExpression);
294 success =
compileLT(pNode, pTrueExpression);
298 success =
compileGE(pNode, pTrueExpression);
302 success =
compileGT(pNode, pTrueExpression);
400 success &=
compile(pLeft, pLeftTrueExpression);
404 success &=
compile(pRight, pRightTrueExpression);
407 pTrueExpression->
addChild(pLeftTrueExpression);
408 pTrueExpression->
addChild(pRightTrueExpression);
423 success &=
compile(pLeft, pLeftTrueExpression);
427 success &=
compile(pRight, pRightTrueExpression);
430 pTrueExpression->
addChild(pLeftTrueExpression);
431 pTrueExpression->
addChild(pRightTrueExpression);
446 success &=
compile(pLeft, pLeftTrueExpression);
450 success &=
compile(pRight, pRightTrueExpression);
453 pTrueExpression->
addChild(pLeftTrueExpression);
454 pTrueExpression->
addChild(pRightTrueExpression);
493 success &=
compile(pLeft, pLeftTrueExpression);
497 success &=
compile(pRight, pRightTrueExpression);
500 pTrueExpression->
addChild(pLeftTrueExpression);
501 pTrueExpression->
addChild(pRightTrueExpression);
524 success &=
compileNOT(pNotNode, pTrueExpression);
641 success &=
compile(pLeft, pLeftTrueExpression);
644 pTrueExpression->
addChild(pLeftTrueExpression);
658 std::vector< const CEvaluationNode * > Variables;
663 while (pChild != NULL)
665 Variables.push_back(pChild);
673 bool success =
compile(pNode, pTrueExpression);
689 return compile(pNode, pTrueExpression);
705 return compile(pNode, pTrueExpression);
CCopasiVector< CRootFinder > mRootFinders
virtual bool setRoot(CEvaluationNode *pRootNode)
CEvaluationNode * copyBranch() const
bool compileNE(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
const CEvaluationTree * getCalledTree() const
virtual bool setInfix(const std::string &infix)
void setRefresh(CType *pType, void(CType::*method)(void))
CCopasiNode< Data > * getSibling()
bool compile(std::vector< CCopasiContainer * > listOfContainer)
bool compileOR(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
void applyInitialValues()
CEvaluationNode * copyBranch(const CEvaluationNode *pSource)
const Type & getType() const
C_FLOAT64 * getRootValuePtr()
virtual bool compile(std::vector< CCopasiContainer * > listOfContainer=CCopasiContainer::EmptyList)
bool compileFUNCTION(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
CExpression mTrueExpression
bool compileNOT(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
void applyInitialValues()
CEvaluationNode * getTrueExpression() const
const bool & isDiscrete() const
static Type type(const Type &type)
bool compileLT(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
bool compileEXPRESSION(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
void addDirectDependency(const CCopasiObject *pObject)
std::stack< std::vector< const CEvaluationNode * > > mFunctionVariableMap
bool compileGT(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
bool compileAND(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
virtual const C_FLOAT64 & calcValue()
virtual bool addChild(CCopasiNode< Data > *pChild, CCopasiNode< Data > *pAfter=NULL)
bool compileLE(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
bool compileGE(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
void determineDiscrete(const std::set< const CCopasiObject * > &stateVariables)
bool compileVARIABLE(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
CRootFinder(const CCopasiContainer *pParent=NULL)
void toggle(const C_FLOAT64 &time, const bool &equality, const bool &continous)
static Type subType(const Type &type)
CMathTrigger(const CCopasiContainer *pParent=NULL)
virtual bool isBoolean() const
std::vector< CType * >::iterator iterator
bool compileXOR(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
void calculateTrueValue()
void calculateTrueValue()
virtual const Data & getData() const
const bool & isEquality() const
bool compileEQ(const CEvaluationNode *pSource, CEvaluationNode *&pTrueExpression)
CCopasiNode< Data > * getChild()
CEvaluationNode * getRoot()
bool compile(const CExpression *pTriggerExpression, std::vector< CCopasiContainer * > listOfContainer)
CCopasiVector< CRootFinder > & getRootFinders()