38 string aname (a->
name());
39 string bname (b->
name());
41 string::size_type last_digit_position_a = aname.size();
42 string::reverse_iterator r_iterator = aname.rbegin();
44 while (r_iterator!= aname.rend() && Glib::Unicode::isdigit(*r_iterator)) {
46 last_digit_position_a--;
49 string::size_type last_digit_position_b = bname.size();
50 r_iterator = bname.rbegin();
52 while (r_iterator != bname.rend() && Glib::Unicode::isdigit(*r_iterator)) {
54 last_digit_position_b--;
59 if (last_digit_position_a == aname.size() || last_digit_position_b == bname.size()) {
63 const std::string prefix_a = aname.substr(0, last_digit_position_a - 1);
64 const unsigned int posfix_a =
std::atoi(aname.substr(last_digit_position_a, aname.size() - last_digit_position_a).c_str());
65 const std::string prefix_b = bname.substr(0, last_digit_position_b - 1);
66 const unsigned int posfix_b =
std::atoi(bname.substr(last_digit_position_b, bname.size() - last_digit_position_b).c_str());
68 if (prefix_a != prefix_b) {
71 return posfix_a < posfix_b;
108 for (std::vector<PortVec>::iterator l =
_ports.begin(); l !=
_ports.end(); ++l) {
109 PortVec::iterator i = find(l->begin(), l->end(),
port);
virtual DataType type() const =0
boost::shared_ptr< MidiPort > nth_midi_port(size_t n) const
int atoi(const string &s)
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
std::vector< boost::shared_ptr< Port > > PortVec
void add(boost::shared_ptr< Port > port)
static bool sort_ports_by_type_and_name(boost::shared_ptr< Port > a, boost::shared_ptr< Port > b)
static const uint32_t num_types
bool remove(boost::shared_ptr< Port > port)
uint32_t get(DataType t) const
bool contains(boost::shared_ptr< const Port > port) const
void set(DataType t, uint32_t count)
boost::shared_ptr< Port > port(size_t index) const
boost::shared_ptr< AudioPort > nth_audio_port(size_t n) const
static bool sort_ports_by_name(boost::shared_ptr< Port > a, boost::shared_ptr< Port > b)
std::vector< PortVec > _ports