5 #ifndef __idependency__ 6 #define __idependency__ 8 #include "vstguibase.h" 9 #include "vstguidebug.h" 34 virtual void changed (IdStringPtr message);
53 static
void rememberObject (
CBaseObject* obj) { obj->remember (); }
56 using DeferedChangesSet = std::set<IdStringPtr>;
57 using DependentList = std::list<CBaseObject*>;
59 int32_t deferChangeCount {0};
60 DeferedChangesSet deferedChanges;
61 DependentList dependents;
67 dependents.emplace_back (obj);
73 dependents.remove (obj);
81 deferedChanges.emplace (message);
83 else if (dependents.empty () ==
false)
86 DependentList localList (dependents);
87 std::for_each (localList.begin (), localList.end (), rememberObject);
88 for (
auto& obj : localList)
89 obj->notify (This, message);
90 std::for_each (localList.begin (), localList.end (), forgetObject);
101 else if (--deferChangeCount == 0)
103 for (
auto& msg : deferedChanges)
105 deferedChanges.clear ();
110 inline IDependency::~IDependency () noexcept
112 vstgui_assert (dependents.size () == 0);
virtual void deferChanges(bool state)
Definition: idependency.h:95
Base Object with reference counter.
Definition: vstguibase.h:276
virtual void changed(IdStringPtr message)
Definition: idependency.h:77
Definition: customcontrols.cpp:8
void forget() override
decrease refcount and delete object if refcount == 0
Definition: vstguibase.h:260
Definition: idependency.h:39
virtual void addDependency(CBaseObject *obj)
Definition: idependency.h:65
virtual void removeDependency(CBaseObject *obj)
Definition: idependency.h:71
simple dependency between objects.
Definition: idependency.h:26