diff --git a/libs/ardour/ardour/automation_event.h b/libs/ardour/ardour/automation_event.h index ffce2bdb9c..7608b6b5fb 100644 --- a/libs/ardour/ardour/automation_event.h +++ b/libs/ardour/ardour/automation_event.h @@ -185,11 +185,9 @@ class AutomationList : public PBD::StatefulDestructible } } - struct TimeComparator { - bool operator() (const ControlEvent* a, const ControlEvent* b) { - return a->when < b->when; - } - }; + static inline bool time_comparator (const ControlEvent* a, const ControlEvent* b) { + return a->when < b->when; + } /** Lookup cache for eval functions, range contains equivalent values */ struct LookupCache { diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index a7b54585d9..49ef21b26f 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -71,11 +71,9 @@ public: typedef std::vector Notes; - struct NoteTimeComparator { - inline bool operator() (const Note& a, const Note& b) const { - return a.start < b.start; - } - }; + inline static bool note_time_comparator (const Note& a, const Note& b) { + return a.start < b.start; + } inline Notes& notes() { return _notes; } inline const Notes& notes() const { return _notes; } diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index dfdcf82cab..b942a086e7 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -232,7 +232,6 @@ bool Automatable::find_next_event (nframes_t now, nframes_t end, ControlEvent& next_event) const { Controls::const_iterator li; - AutomationList::TimeComparator cmp; next_event.when = max_frames; @@ -242,7 +241,8 @@ Automatable::find_next_event (nframes_t now, nframes_t end, ControlEvent& next_e boost::shared_ptr alist (li->second->list()); ControlEvent cp (now, 0.0f); - for (i = lower_bound (alist->const_begin(), alist->const_end(), &cp, cmp); i != alist->const_end() && (*i)->when < end; ++i) { + for (i = lower_bound (alist->const_begin(), alist->const_end(), &cp, AutomationList::time_comparator); + i != alist->const_end() && (*i)->when < end; ++i) { if ((*i)->when > now) { break; } diff --git a/libs/ardour/automation_event.cc b/libs/ardour/automation_event.cc index a682526457..31f88c3ced 100644 --- a/libs/ardour/automation_event.cc +++ b/libs/ardour/automation_event.cc @@ -318,7 +318,6 @@ AutomationList::rt_add (double when, double value) Glib::Mutex::Lock lm (_lock); iterator where; - TimeComparator cmp; ControlEvent cp (when, 0.0); bool done = false; @@ -370,7 +369,7 @@ AutomationList::rt_add (double when, double value) } else { - where = lower_bound (_events.begin(), _events.end(), &cp, cmp); + where = lower_bound (_events.begin(), _events.end(), &cp, time_comparator); if (where != _events.end()) { if ((*where)->when == when) { @@ -405,12 +404,11 @@ AutomationList::add (double when, double value) { Glib::Mutex::Lock lm (_lock); - TimeComparator cmp; ControlEvent cp (when, 0.0f); bool insert = true; iterator insertion_point; - for (insertion_point = lower_bound (_events.begin(), _events.end(), &cp, cmp); insertion_point != _events.end(); ++insertion_point) { + for (insertion_point = lower_bound (_events.begin(), _events.end(), &cp, time_comparator); insertion_point != _events.end(); ++insertion_point) { /* only one point allowed per time point */ @@ -469,15 +467,14 @@ AutomationList::reset_range (double start, double endt) { Glib::Mutex::Lock lm (_lock); - TimeComparator cmp; ControlEvent cp (start, 0.0f); iterator s; iterator e; - if ((s = lower_bound (_events.begin(), _events.end(), &cp, cmp)) != _events.end()) { + if ((s = lower_bound (_events.begin(), _events.end(), &cp, time_comparator)) != _events.end()) { cp.when = endt; - e = upper_bound (_events.begin(), _events.end(), &cp, cmp); + e = upper_bound (_events.begin(), _events.end(), &cp, time_comparator); for (iterator i = s; i != e; ++i) { (*i)->value = _default_value; @@ -501,14 +498,13 @@ AutomationList::erase_range (double start, double endt) { Glib::Mutex::Lock lm (_lock); - TimeComparator cmp; ControlEvent cp (start, 0.0f); iterator s; iterator e; - if ((s = lower_bound (_events.begin(), _events.end(), &cp, cmp)) != _events.end()) { + if ((s = lower_bound (_events.begin(), _events.end(), &cp, time_comparator)) != _events.end()) { cp.when = endt; - e = upper_bound (_events.begin(), _events.end(), &cp, cmp); + e = upper_bound (_events.begin(), _events.end(), &cp, time_comparator); _events.erase (s, e); reposition_for_rt_add (0); erased = true; @@ -608,14 +604,13 @@ AutomationList::control_points_adjacent (double xval) { Glib::Mutex::Lock lm (_lock); iterator i; - TimeComparator cmp; ControlEvent cp (xval, 0.0f); std::pair ret; ret.first = _events.end(); ret.second = _events.end(); - for (i = lower_bound (_events.begin(), _events.end(), &cp, cmp); i != _events.end(); ++i) { + for (i = lower_bound (_events.begin(), _events.end(), &cp, time_comparator); i != _events.end(); ++i) { if (ret.first == _events.end()) { if ((*i)->when >= xval) { @@ -966,8 +961,7 @@ AutomationList::multipoint_eval (double x) const /* FIXME: no cache. significant? */ if (_interpolation == Discrete) { const ControlEvent cp (x, 0); - TimeComparator cmp; - EventList::const_iterator i = lower_bound (_events.begin(), _events.end(), &cp, cmp); + EventList::const_iterator i = lower_bound (_events.begin(), _events.end(), &cp, time_comparator); // shouldn't have made it to multipoint_eval assert(i != _events.end()); @@ -986,9 +980,8 @@ AutomationList::multipoint_eval (double x) const ((*_lookup_cache.range.second)->when < x))) { const ControlEvent cp (x, 0); - TimeComparator cmp; - _lookup_cache.range = equal_range (_events.begin(), _events.end(), &cp, cmp); + _lookup_cache.range = equal_range (_events.begin(), _events.end(), &cp, time_comparator); } pair range = _lookup_cache.range; @@ -1042,13 +1035,12 @@ AutomationList::build_search_cache_if_necessary(double start, double end) const const ControlEvent start_point (start, 0); const ControlEvent end_point (end, 0); - TimeComparator cmp; //cerr << "REBUILD: (" << _search_cache.left << ".." << _search_cache.right << ") -> (" // << start << ".." << end << ")" << endl; - _search_cache.range.first = lower_bound (_events.begin(), _events.end(), &start_point, cmp); - _search_cache.range.second = upper_bound (_events.begin(), _events.end(), &end_point, cmp); + _search_cache.range.first = lower_bound (_events.begin(), _events.end(), &start_point, time_comparator); + _search_cache.range.second = upper_bound (_events.begin(), _events.end(), &end_point, time_comparator); _search_cache.left = start; _search_cache.right = end; @@ -1242,18 +1234,17 @@ AutomationList::cut_copy_clear (double start, double end, int op) AutomationList* nal = new AutomationList (_parameter, _min_yval, _max_yval, _default_value); iterator s, e; ControlEvent cp (start, 0.0); - TimeComparator cmp; bool changed = false; { Glib::Mutex::Lock lm (_lock); - if ((s = lower_bound (_events.begin(), _events.end(), &cp, cmp)) == _events.end()) { + if ((s = lower_bound (_events.begin(), _events.end(), &cp, time_comparator)) == _events.end()) { return nal; } cp.when = end; - e = upper_bound (_events.begin(), _events.end(), &cp, cmp); + e = upper_bound (_events.begin(), _events.end(), &cp, time_comparator); if (op != 2 && (*s)->when != start) { nal->_events.push_back (new ControlEvent (0, unlocked_eval (start))); @@ -1353,9 +1344,8 @@ AutomationList::paste (AutomationList& alist, double pos, float times) iterator prev; double end = 0; ControlEvent cp (pos, 0.0); - TimeComparator cmp; - where = upper_bound (_events.begin(), _events.end(), &cp, cmp); + where = upper_bound (_events.begin(), _events.end(), &cp, time_comparator); for (iterator i = alist.begin();i != alist.end(); ++i) { _events.insert (where, new ControlEvent( (*i)->when+pos,( *i)->value)); diff --git a/libs/ardour/curve.cc b/libs/ardour/curve.cc index 380074fa19..344b4738d7 100644 --- a/libs/ardour/curve.cc +++ b/libs/ardour/curve.cc @@ -347,10 +347,9 @@ Curve::multipoint_eval (double x) (lookup_cache.range.first == _list.events().end()) || ((*lookup_cache.range.second)->when < x))) { - AutomationList::TimeComparator cmp; ControlEvent cp (x, 0.0); - lookup_cache.range = equal_range (_list.events().begin(), _list.events().end(), &cp, cmp); + lookup_cache.range = equal_range (_list.events().begin(), _list.events().end(), &cp, AutomationList::time_comparator); } range = lookup_cache.range; diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index 4c1a8eea0d..9e8a5295a8 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -149,7 +149,7 @@ MidiModel::append_note_off(double time, uint8_t note_num) void MidiModel::add_note(const Note& note) { - Notes::iterator i = upper_bound(_notes.begin(), _notes.end(), note, NoteTimeComparator()); + Notes::iterator i = upper_bound(_notes.begin(), _notes.end(), note, note_time_comparator); _notes.insert(i, note); if (_command) _command->add_note(note);