13
0

Remove c-pointer Controllable* registry

This commit is contained in:
Robin Gareus 2019-03-23 01:37:28 +01:00
parent baed14c17e
commit 1dedadd03f
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 1 additions and 71 deletions

View File

@ -34,74 +34,13 @@ PBD::Signal1<bool,Controllable*> Controllable::StartLearning;
PBD::Signal1<void,Controllable*> Controllable::StopLearning;
PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > Controllable::GUIFocusChanged;
Glib::Threads::RWLock Controllable::registry_lock;
Controllable::Controllables Controllable::registry;
PBD::ScopedConnectionList* registry_connections = 0;
const std::string Controllable::xml_node_name = X_("Controllable");
Controllable::Controllable (const string& name, Flag f)
: _name (name)
, _flags (f)
, _touching (false)
{
add (*this);
}
void
Controllable::add (Controllable& ctl)
{
using namespace boost;
Glib::Threads::RWLock::WriterLock lm (registry_lock);
registry.insert (&ctl);
if (!registry_connections) {
registry_connections = new ScopedConnectionList;
}
/* Controllable::remove() is static - no need to manage this connection */
ctl.DropReferences.connect_same_thread (*registry_connections, boost::bind (&Controllable::remove, &ctl));
}
void
Controllable::remove (Controllable* ctl)
{
Glib::Threads::RWLock::WriterLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i) == ctl) {
registry.erase (i);
break;
}
}
}
Controllable*
Controllable::by_id (const ID& id)
{
Glib::Threads::RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->id() == id) {
return (*i);
}
}
return 0;
}
Controllable*
Controllable::by_name (const string& str)
{
Glib::Threads::RWLock::ReaderLock lm (registry_lock);
for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
if ((*i)->_name == str) {
return (*i);
}
}
return 0;
}
{}
XMLNode&
Controllable::get_state ()

View File

@ -150,8 +150,6 @@ public:
Flag flags() const { return _flags; }
void set_flags (Flag f);
static Controllable* by_id (const PBD::ID&);
static Controllable* by_name (const std::string&);
static const std::string xml_node_name;
protected:
@ -167,13 +165,6 @@ private:
std::string _units;
Flag _flags;
bool _touching;
static void add (Controllable&);
static void remove (Controllable*);
typedef std::set<PBD::Controllable*> Controllables;
static Glib::Threads::RWLock registry_lock;
static Controllables registry;
};
/* a utility class for the occasions when you need but do not have