summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-13 22:34:20 -0500
committerDavid Robillard <d@drobilla.net>2014-11-13 22:34:20 -0500
commit8907477271b8a6b356127e2367753f0d6dbd5308 (patch)
tree8e7c0728f48ab4c2bb57b81efcd3492fc89a142a
parenta1e4befcca63ec660316d4c80cda090ccae75f48 (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.hpp1
-rw-r--r--libs/evoral/src/Sequence.cpp12
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;
}