diff options
-rw-r--r-- | libs/ardour/ardour/port_manager.h | 3 | ||||
-rw-r--r-- | libs/ardour/port_manager.cc | 23 |
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. */ |