50 mObjectName(
"No Name"),
51 mObjectType(
"Unknown Type"),
53 mpObjectDisplayName(NULL),
55 mpUpdateMethod(&this->mDefaultUpdateMethod),
61 const std::string & type,
64 mObjectName((name ==
"") ?
"No Name" : name),
67 mpObjectDisplayName(NULL),
69 mpUpdateMethod(&this->mDefaultUpdateMethod),
79 mObjectName(src.mObjectName),
80 mObjectType(src.mObjectType),
82 mpObjectDisplayName(NULL),
83 mObjectFlag(src.mObjectFlag),
84 mpUpdateMethod(&this->mDefaultUpdateMethod),
110 CN = (std::string)
"CN=Root";
113 std::stringstream tmp;
143 if (cn ==
"Property=DisplayName")
160 std::string Name = (name ==
"") ?
"No Name" : name;
166 std::string::iterator it = Name.begin();
167 std::string::iterator end = Name.end();
169 for (; it != end; ++it)
194 std::string oldCN = this->
getCN();
196 std::string newCN = this->
getCN();
218 std::string ret =
"";
224 if (ret ==
"(CN)Root" ||
225 ret ==
"ModelList[]" ||
226 ret.substr(0, 7) ==
"(Model)")
232 if (ret.length() >= 2)
233 if ((ret.substr(ret.length() - 2) ==
"[]") && (!
isReference()))
243 if ((ret.length() != 0) && (ret[ret.length() - 1] !=
'.'))
331 if (changedObjects.find(
this) != changedObjects.end())
339 assert(Prerequisites.find(pObject) != Prerequisites.end());
340 #endif // COPASI_DEBUG
349 CCopasiObject::DataObjectSet::const_iterator it = DirectDependencies.begin();
350 CCopasiObject::DataObjectSet::const_iterator end = DirectDependencies.end();
352 std::pair<CCopasiObject::DataObjectSet::iterator, bool> Inserted;
354 for (; it != end; ++it)
357 Inserted = dependencies.insert(*it);
361 if (!Inserted.second)
continue;
364 (*it)->getAllDependencies(dependencies, context);
371 bool MustBeDeleted =
false;
376 for (; it != end; ++it)
378 if (deletedObjects.find(*it) != deletedObjects.end())
380 MustBeDeleted =
true;
385 return MustBeDeleted;
401 if (verified.count(
this) != 0)
402 return hasCircularDependencies;
405 CCopasiObject::DataObjectSet::const_iterator it = DirectDependencies.begin();
406 CCopasiObject::DataObjectSet::const_iterator end = DirectDependencies.end();
408 std::pair<CCopasiObject::DataObjectSet::iterator, bool> Inserted;
411 Inserted = candidates.insert(
this);
420 hasCircularDependencies = (*it)->hasCircularDependencies(candidates, verified, context);
425 candidates.erase(
this);
428 hasCircularDependencies =
true;
431 verified.insert(
this);
437 std::vector< Refresh * >
445 CCopasiObject::DataObjectSet::const_iterator itSet;
446 CCopasiObject::DataObjectSet::const_iterator endSet = objects.end();
447 std::pair<CCopasiObject::DataObjectSet::iterator, bool> InsertedObject;
449 assert(objects.count(NULL) == 0);
452 for (itSet = objects.begin(); itSet != endSet; ++itSet)
453 if ((*itSet)->hasCircularDependencies(DependencySet, VerifiedSet, context))
457 for (itSet = objects.begin(); itSet != endSet; ++itSet)
460 InsertedObject = DependencySet.insert(*itSet);
463 if (InsertedObject.second)
464 (*itSet)->getAllDependencies(DependencySet, context);
469 for (itSet = DependencySet.begin(), endSet = DependencySet.end(); itSet != endSet;)
470 if ((*itSet)->getRefresh() == NULL ||
473 (*itSet)->getDirectDependencies(context).size() == 0))
477 DependencySet.erase(pObject);
485 for (itSet = uptoDateObjects.begin(), endSet = uptoDateObjects.end(); itSet != endSet; ++itSet)
488 InsertedObject = UpToDateSet.insert(*itSet);
491 if (InsertedObject.second)
496 for (itSet = UpToDateSet.begin(), endSet = UpToDateSet.end(); itSet != endSet; ++itSet)
497 DependencySet.erase(*itSet);
500 std::list< const CCopasiObject * > SortedList =
503 std::list< const CCopasiObject * >::iterator itList;
504 std::list< const CCopasiObject * >::iterator endList;
509 std::vector< Refresh * > UpdateVector;
510 std::vector< Refresh * >::const_iterator itUpdate;
511 std::vector< Refresh * >::const_iterator endUpdate;
513 itList = SortedList.begin();
514 endList = SortedList.end();
516 for (; itList != endList; ++itList)
518 pRefresh = (*itList)->getRefresh();
519 itUpdate = UpdateVector.begin();
520 endUpdate = UpdateVector.end();
522 while (itUpdate != endUpdate && !(*itUpdate)->isEqual(pRefresh)) ++itUpdate;
524 if (itUpdate == endUpdate)
525 UpdateVector.push_back(pRefresh);
540 Candidates.insert(lhs);
610 static std::string DefaultKey(
"");
616 {(*mpUpdateMethod)(value);}
619 {(*mpUpdateMethod)(value);}
622 {(*mpUpdateMethod)(value);}
649 os <<
"Container: " << o.
isContainer() << std::endl;
650 os <<
"Vector: " << o.
isVector() << std::endl;
652 os <<
"Matrix: " << o.
isMatrix() << std::endl;
653 os <<
"Reference: " << o.
isReference() << std::endl;
670 while (pObject != NULL)
673 return static_cast<CCopasiDataModel *>(pObject);
690 while (pObject != NULL)
693 return static_cast<const CCopasiDataModel *>(pObject);
CCopasiDataModel * getObjectDataModel()
virtual bool setObjectParent(const CCopasiContainer *pParent)
virtual Refresh * getRefresh() const
CCopasiContainer * getObjectAncestor(const std::string &type) const
unsigned C_INT32 mObjectFlag
virtual std::string getObjectDisplayName(bool regular=true, bool richtext=false) const
void clearDirectDependencies()
CCopasiStaticString * mpObjectDisplayName
Header file of class CModelEntity and CModelValue.
UpdateMethod * getUpdateMethod() const
bool isNameVector() const
void setObjectValue(const C_FLOAT64 &value)
virtual CCopasiObjectName getCN() const
const std::string & getObjectName() const
virtual const CObjectInterface * getObject(const CCopasiObjectName &cn) const
virtual void handle(const std::string &oldCN, const std::string &newCN) const =0
bool hasCircularDependencies(DataObjectSet &candidates, DataObjectSet &verified, const DataObjectSet &context) const
static CRenameHandler * smpRenameHandler
void setDirectDependencies(const DataObjectSet &directDependencies)
bool isNonUniqueName() const
UpdateMethod * mpUpdateMethod
const std::string & getObjectType() const
std::ostream & operator<<(std::ostream &os, const CCopasiObject &o)
static std::string escape(const std::string &name)
DataObjectSet mDependencies
std::list< const CCopasiObject * > sortObjectsByDependency(ForwardAccessIterator begin, ForwardAccessIterator end, const CCopasiObject::DataObjectSet &context)
virtual const std::string & getKey() const
virtual std::string getChildObjectUnits(const CCopasiObject *pObject) const
void addDirectDependency(const CCopasiObject *pObject)
virtual const CObjectInterface::ObjectSet & getPrerequisites() const
static UpdateMethod mDefaultUpdateMethod
virtual bool remove(CCopasiObject *pObject)
Header file of class CCopasiContainer.
bool hasUpdateMethod() const
virtual bool mustBeDeleted(const DataObjectSet &deletedObjects) const
bool dependsOn(DataObjectSet candidates, const DataObjectSet &context=DataObjectSet()) const
std::set< const CObjectInterface * > ObjectSet
virtual const DataObjectSet & getDirectDependencies(const DataObjectSet &context=DataObjectSet()) const
CCopasiContainer * mpObjectParent
virtual size_t getIndex(const CCopasiObject *pObject) const
virtual std::string getUnits() const
bool isValueString() const
bool isValueInt64() const
void removeDirectDependency(const CCopasiObject *pObject)
static std::vector< Refresh * > buildUpdateSequence(const DataObjectSet &objects, const DataObjectSet &uptoDateObjects, const DataObjectSet &context=DataObjectSet())
virtual bool add(CCopasiObject *pObject, const bool &adopt=true)
virtual void * getValuePointer() const
bool isStaticString() const
void getAllDependencies(DataObjectSet &dependencies, const DataObjectSet &context) const
virtual const CObjectInterface * getObject(const CCopasiObjectName &cn) const
virtual const CCopasiObject * getValueObject() const
static const C_FLOAT64 DummyValue
bool setObjectName(const std::string &name)
std::set< const CCopasiObject * > DataObjectSet
virtual void print(std::ostream *ostream) const
CCopasiContainer * getObjectParent() const
virtual bool isPrerequisiteForContext(const CObjectInterface *pObject, const CMath::SimulationContextFlag &context, const CObjectInterface::ObjectSet &changedObjects) const