Do a topological sort of the route list before passing it to
[ardour.git] / libs / ardour / bundle.cc
index 94fada383d1c6f5b35236ea626488cbb106be928..d8666c5bbba8d9d5424085185b9e4dc1bec09780 100644 (file)
@@ -177,6 +177,18 @@ Bundle::add_channel (std::string const & n, DataType t, PortList p)
        emit_changed (ConfigurationChanged);
 }
 
+/** @param n Channel name */
+void
+Bundle::add_channel (std::string const & n, DataType t, std::string const & p)
+{
+       {
+               Glib::Mutex::Lock lm (_channel_mutex);
+               _channel.push_back (Channel (n, t, p));
+       }
+
+       emit_changed (ConfigurationChanged);
+}
+
 bool
 Bundle::port_attached_to_channel (uint32_t ch, std::string portname)
 {
@@ -211,7 +223,7 @@ Bundle::remove_channels ()
  *  @return true if any channel is associated with p.
  */
 bool
-Bundle::uses_port (std::string p) const
+Bundle::offers_port (std::string p) const
 {
        Glib::Mutex::Lock lm (_channel_mutex);
 
@@ -409,8 +421,8 @@ Bundle::connected_to (boost::shared_ptr<Bundle> other, AudioEngine & engine)
                for (uint32_t j = 0; j < A.size(); ++j) {
                        for (uint32_t k = 0; k < B.size(); ++k) {
 
-                               Port* p = engine.get_port_by_name (A[j]);
-                               Port* q = engine.get_port_by_name (B[k]);
+                               boost::shared_ptr<Port> p = engine.get_port_by_name (A[j]);
+                               boost::shared_ptr<Port> q = engine.get_port_by_name (B[k]);
 
                                if (!p && !q) {
                                        return false;
@@ -482,5 +494,26 @@ Bundle::channel_type (uint32_t c) const
 
        Glib::Mutex::Lock lm (_channel_mutex);
        return _channel[c].type;
-}      
+}
+
+ostream &
+operator<< (ostream& os, Bundle const & b)
+{
+       os << "BUNDLE " << b.nchannels() << " channels: ";
+       for (uint32_t i = 0; i < b.nchannels().n_total(); ++i) {
+               os << "( ";
+               Bundle::PortList const & pl = b.channel_ports (i);
+               for (Bundle::PortList::const_iterator j = pl.begin(); j != pl.end(); ++j) {
+                       os << *j << " ";
+               }
+               os << ") ";
+       }
 
+       return os;
+}
+
+bool
+Bundle::operator== (Bundle const & other)
+{
+       return _channel == other._channel;
+}