diff options
Diffstat (limited to 'libs/ardour/slavable.cc')
-rw-r--r-- | libs/ardour/slavable.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libs/ardour/slavable.cc b/libs/ardour/slavable.cc index 7d8109eac6..155fd4f736 100644 --- a/libs/ardour/slavable.cc +++ b/libs/ardour/slavable.cc @@ -60,6 +60,32 @@ Slavable::get_state () const return *node; } +std::vector<boost::shared_ptr<VCA> > +Slavable::masters (VCAManager* manager) const +{ + std::vector<boost::shared_ptr<VCA> > rv; + Glib::Threads::RWLock::ReaderLock lm (master_lock); + for (std::set<uint32_t>::const_iterator i = _masters.begin(); i != _masters.end(); ++i) { + rv.push_back (manager->vca_by_number (*i)); + } + return rv; +} + +bool +Slavable::assigned_to (VCAManager* manager, boost::shared_ptr<VCA> mst) const +{ + if (mst.get () == this) { + return true; + } + std::vector<boost::shared_ptr<VCA> > ml = mst->masters (manager); + for (std::vector<boost::shared_ptr<VCA> >::const_iterator i = ml.begin (); i != ml.end(); ++i) { + if (assigned_to (manager, *i)) { + return true; + } + } + return false; +} + int Slavable::set_state (XMLNode const& node, int version) { |