diff options
author | David Robillard <d@drobilla.net> | 2014-11-13 22:34:20 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-13 22:34:20 -0500 |
commit | 8907477271b8a6b356127e2367753f0d6dbd5308 (patch) | |
tree | 8e7c0728f48ab4c2bb57b81efcd3492fc89a142a | |
parent | a1e4befcca63ec660316d4c80cda090ccae75f48 (diff) |
Fix crashes on various MIDI editing operations.
Assertions assumed old strict ordering, no longer reflecting reality of fuzzy
time comparison (introduced in 86f1b8).
-rw-r--r-- | libs/evoral/evoral/Sequence.hpp | 1 | ||||
-rw-r--r-- | libs/evoral/src/Sequence.cpp | 12 |
2 files changed, 6 insertions, 7 deletions
diff --git a/libs/evoral/evoral/Sequence.hpp b/libs/evoral/evoral/Sequence.hpp index 280fc600de..484afa8459 100644 --- a/libs/evoral/evoral/Sequence.hpp +++ b/libs/evoral/evoral/Sequence.hpp @@ -136,7 +136,6 @@ public: inline bool operator()(const boost::shared_ptr< const Note<Time> > a, const boost::shared_ptr< const Note<Time> > b) const { return musical_time_greater_than (a->time(), b->time()); - return a->time() > b->time(); } }; diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp index 7084a90491..4487bc43c4 100644 --- a/libs/evoral/src/Sequence.cpp +++ b/libs/evoral/src/Sequence.cpp @@ -905,7 +905,7 @@ Sequence<Time>::append(const Event<Time>& event, event_id_t evid) const MIDIEvent<Time>& ev = (const MIDIEvent<Time>&)event; - assert(_notes.empty() || ev.time() >= (*_notes.rbegin())->time()); + assert(_notes.empty() || musical_time_greater_or_equal_to(ev.time(), (*_notes.rbegin())->time())); assert(_writing); if (!midi_event_is_valid(ev.buffer(), ev.size())) { @@ -1052,7 +1052,7 @@ Sequence<Time>::append_note_off_unlocked (NotePtr note) NotePtr nn = *n; if (note->note() == nn->note() && nn->channel() == note->channel()) { - assert(note->time() >= nn->time()); + assert(musical_time_greater_or_equal_to(note->time(), nn->time())); nn->set_length (note->time() - nn->time()); nn->set_off_velocity (note->velocity()); @@ -1215,7 +1215,7 @@ Sequence<Time>::note_lower_bound (Time t) const { NotePtr search_note(new Note<Time>(0, t, 0, 0, 0)); typename Sequence<Time>::Notes::const_iterator i = _notes.lower_bound(search_note); - assert(i == _notes.end() || (*i)->time() >= t); + assert(i == _notes.end() || musical_time_greater_or_equal_to((*i)->time(), t)); return i; } @@ -1237,7 +1237,7 @@ Sequence<Time>::sysex_lower_bound (Time t) const { SysExPtr search (new Event<Time> (0, t)); typename Sequence<Time>::SysExes::const_iterator i = _sysexes.lower_bound (search); - assert (i == _sysexes.end() || (*i)->time() >= t); + assert (i == _sysexes.end() || musical_time_greater_or_equal_to((*i)->time(), t)); return i; } @@ -1250,7 +1250,7 @@ Sequence<Time>::note_lower_bound (Time t) { NotePtr search_note(new Note<Time>(0, t, 0, 0, 0)); typename Sequence<Time>::Notes::iterator i = _notes.lower_bound(search_note); - assert(i == _notes.end() || (*i)->time() >= t); + assert(i == _notes.end() || musical_time_greater_or_equal_to((*i)->time(), t)); return i; } @@ -1272,7 +1272,7 @@ Sequence<Time>::sysex_lower_bound (Time t) { SysExPtr search (new Event<Time> (0, t)); typename Sequence<Time>::SysExes::iterator i = _sysexes.lower_bound (search); - assert (i == _sysexes.end() || (*i)->time() >= t); + assert (i == _sysexes.end() || musical_time_greater_or_equal_to((*i)->time(), t)); return i; } |