summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/port_manager.h3
-rw-r--r--libs/ardour/port_manager.cc23
2 files changed, 25 insertions, 1 deletions
diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h
index 71b18f2f78..390369fefd 100644
--- a/libs/ardour/ardour/port_manager.h
+++ b/libs/ardour/ardour/port_manager.h
@@ -81,7 +81,8 @@ class LIBARDOUR_API PortManager
std::string make_port_name_non_relative (const std::string& name) const;
std::string get_pretty_name_by_name (const std::string& portname) const;
bool port_is_mine (const std::string& fullname) const;
-
+ bool port_name_prefix_is_unique (const std::string& first_part_of_port_name) const;
+
/* other Port management */
bool port_is_physical (const std::string&) const;
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index a1a4397551..02e7719cc4 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -17,6 +17,7 @@
*/
+#include "pbd/convert.h"
#include "pbd/error.h"
#include "ardour/async_midi_port.h"
@@ -197,6 +198,28 @@ PortManager::n_physical_inputs () const
return _backend->n_physical_inputs ();
}
+bool
+PortManager::port_name_prefix_is_unique (const string& first_part_of_port_name) const
+{
+ if (!_backend) {
+ return boost::shared_ptr<Port>();
+ }
+
+ boost::shared_ptr<const Ports> pr = ports.reader();
+ const string::size_type len = first_part_of_port_name.length();
+
+ for (Ports::const_iterator x = pr->begin(); x != pr->end(); ++x) {
+
+ string prefix = x->first.substr (0, len);
+
+ if (strings_equal_ignore_case (prefix, first_part_of_port_name)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
/** @param name Full or short name of port
* @return Corresponding Port or 0.
*/