#include <fstream>
#include <algorithm>
+#include <cmath>
+
#include <unistd.h>
#include <locale.h>
#include <errno.h>
-
#include <glibmm.h>
#include <glibmm/thread.h>
#include "i18n.h"
-#include <cmath>
-
-/*
- A bug in OS X's cmath that causes isnan() and isinf() to be
- "undeclared". the following works around that
-*/
-
-#if defined(__APPLE__) && defined(__MACH__)
-extern "C" int isnan (double);
-extern "C" int isinf (double);
-#endif
-
-#define BLOCK_PROCESS_CALLBACK() Glib::Mutex::Lock em (_session.engine().process_lock())
+#define BLOCK_PROCESS_CALLBACK() Glib::Mutex::Lock em (AudioEngine::instance()->process_lock())
using namespace std;
using namespace ARDOUR;
catch (AudioEngine::PortRegistrationFailure& err) {
/* pass it on */
- throw AudioEngine::PortRegistrationFailure();
+ throw;
}
_ports.add (port);
// see if it's a stereo connection e.g. "in 3+4"
if (last_non_digit_pos > 1 && desired_name[last_non_digit_pos] == '+') {
- int left_bundle_number = 0;
string::size_type left_last_non_digit_pos;
left_last_non_digit_pos = desired_name.find_last_not_of(digits, last_non_digit_pos-1);
if (left_last_non_digit_pos != string::npos) {
+ int left_bundle_number = 0;
stringstream s;
s << desired_name.substr(left_last_non_digit_pos, last_non_digit_pos-1);
s >> left_bundle_number;
if ((prop = node.property ("inputs")) != 0 && _direction == Input) {
n_audio = count (prop->value().begin(), prop->value().end(), '{');
+ } else if ((prop = node.property ("input-connection")) != 0 && _direction == Input) {
+ n_audio = 1;
} else if ((prop = node.property ("outputs")) != 0 && _direction == Output) {
n_audio = count (prop->value().begin(), prop->value().end(), '{');
+ } else if ((prop = node.property ("output-connection")) != 0 && _direction == Output) {
+ n_audio = 2;
}
}
if ((prop = cnode->property (X_("other"))) == 0) {
continue;
}
-
+
if (prop) {
p->connect (prop->value());
}
}
- }
+ }
}
}
/* replace all colons in the name. i wish we didn't have to do this */
- if (replace_all (name, ":", "-")) {
- warning << _("you cannot use colons to name objects with I/O connections") << endmsg;
- }
+ replace_all (name, ":", "-");
for (PortSet::iterator i = _ports.begin(); i != _ports.end(); ++i) {
string current_name = i->name();
}
}
+bool
+IO::connected () const
+{
+ /* do we have any connections at all? */
+
+ for (PortSet::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
+ if (p->connected()) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool
IO::connected_to (boost::shared_ptr<const IO> other) const
{
if (!other) {
- /* do we have any connections at all? */
-
- for (PortSet::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
- if (p->connected()) {
- return true;
- }
- }
-
- return false;
+ return connected ();
}
assert (_direction != other->direction());
return 0;
}
+
+bool
+IO::physically_connected () const
+{
+ for (PortSet::const_iterator i = _ports.begin(); i != _ports.end(); ++i) {
+ if (i->physically_connected()) {
+ return true;
+ }
+ }
+
+ return false;
+}