switch Route::fed_by from shared_ptr to weak_ptr and thus begin to allow Route destru...
[ardour.git] / libs / ardour / ardour / jack_port.h
index c3c31c938d00969c5cb34f12465fbdba08ab8517..3101ce95230e201c72bd4b7394503e023ac97fbb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2002 Paul Davis 
+    Copyright (C) 2002 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -21,8 +21,8 @@
 #define __ardour_jack_port_h__
 
 #include <sigc++/signal.h>
-#include <pbd/failed_constructor.h>
-#include <ardour/port.h>
+#include "pbd/failed_constructor.h"
+#include "ardour/port.h"
 #include <jack/jack.h>
 
 namespace ARDOUR {
@@ -32,43 +32,54 @@ class Buffer;
 
 /** Abstract class representing JACK ports
  */
-class JackPort : public virtual Port {
+class JackPort : public virtual Port, public PortConnectableByName {
    public:
 
        ~JackPort();
 
-       std::string short_name() 
+       std::string short_name() const {
                return jack_port_short_name (_port);
        }
-       
-       int set_name (std::string str);
-       
-       int connected () const {
+
+       int set_name (const std::string& str);
+
+       bool connected () const {
                return jack_port_connected (_port);
        }
-       
+
        int reestablish ();
-       
+       int reconnect ();
+
+       int connect (Port& other) {
+               if (_flags & IsOutput) {
+                       return 0;
+               }
+               return connect (other.name());
+       }
+
+       int disconnect (Port& other) {
+               return disconnect (other.name());
+       }
+
+       int disconnect_all ();
+
+       // connect-by-name API
+
+       int connect (const std::string& other_name);
+       int disconnect (const std::string& other_name);
+
        bool connected_to (const std::string& portname) const {
                return jack_port_connected_to (_port, portname.c_str());
        }
 
-       const char ** get_connections () const {
-               return jack_port_get_connections (_port);
-       }
-       
+       int get_connections (std::vector<std::string>& names) const;
+
        bool monitoring_input () const {
                return jack_port_monitoring_input (_port);
        }
 
        void ensure_monitor_input (bool yn) {
-
-#ifdef HAVE_JACK_PORT_ENSURE_MONITOR
                jack_port_ensure_monitor (_port, yn);
-#else
-               jack_port_request_monitor(_port, yn);
-#endif
-
        }
 
        /*XXX completely bloody useless imho*/
@@ -93,13 +104,12 @@ class JackPort : public virtual Port {
        JackPort (const std::string&, DataType type, Flags flags);
        jack_port_t*  _port;
 
-       int disconnect ();
+       int disconnect ();
        void recompute_total_latency() const;
 
-       static void set_engine (AudioEngine*);
-       static AudioEngine* engine;
+       std::set<std::string> _named_connections;
 };
+
 } // namespace ARDOUR
 
 #endif /* __ardour_jack_port_h__ */