summaryrefslogtreecommitdiff
path: root/libs/ardour/slavable.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/slavable.cc')
-rw-r--r--libs/ardour/slavable.cc26
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)
{