diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d76c173af1..40f267717b 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -2368,17 +2368,12 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op) MidiCutBuffer* MidiRegionView::selection_as_cut_buffer () const { - NoteList notes; + Notes notes; for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) { - notes.push_back (boost::shared_ptr (new NoteType (*((*i)->note().get())))); + notes.insert (boost::shared_ptr (new NoteType (*((*i)->note().get())))); } - /* sort them into time order */ - - Evoral::Sequence::LaterNoteComparator cmp; - sort (notes.begin(), notes.end(), cmp); - MidiCutBuffer* cb = new MidiCutBuffer (trackview.session()); cb->set (notes); @@ -2399,16 +2394,16 @@ MidiRegionView::paste (nframes64_t pos, float times, const MidiCutBuffer& mcb) Evoral::MusicalTime duration; Evoral::MusicalTime end_point; - duration = mcb.notes().back()->end_time() - mcb.notes().front()->time(); + duration = (*mcb.notes().rbegin())->end_time() - (*mcb.notes().begin())->time(); paste_pos_beats = frames_to_beats (pos - _region->position()); - beat_delta = mcb.notes().front()->time() - paste_pos_beats; + beat_delta = (*mcb.notes().begin())->time() - paste_pos_beats; paste_pos_beats = 0; _selection.clear (); for (int n = 0; n < (int) times; ++n) { - for (NoteList::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { + for (Notes::const_iterator i = mcb.notes().begin(); i != mcb.notes().end(); ++i) { boost::shared_ptr copied_note (new NoteType (*((*i).get()))); copied_note->set_time (paste_pos_beats + copied_note->time() - beat_delta); @@ -2516,13 +2511,13 @@ MidiRegionView::goto_previous_note () } void -MidiRegionView::selection_as_notelist (NoteList& selected) +MidiRegionView::selection_as_notelist (Notes& selected) { time_sort_events (); for (Events::iterator i = _events.begin(); i != _events.end(); ++i) { if ((*i)->selected()) { - selected.push_back ((*i)->note()); + selected.insert ((*i)->note()); } } } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 36b7c99f54..22c2b845fd 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -65,7 +65,7 @@ class MidiRegionView : public RegionView { public: typedef Evoral::Note NoteType; - typedef Evoral::Sequence::Notes NoteList; + typedef Evoral::Sequence::Notes Notes; MidiRegionView (ArdourCanvas::Group *, RouteTimeAxisView&, @@ -285,7 +285,7 @@ class MidiRegionView : public RegionView void show_list_editor (); - void selection_as_notelist (NoteList& selected); + void selection_as_notelist (Notes& selected); protected: /** Allows derived types to specify their visibility requirements diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 01297abf89..cb5537d601 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -574,11 +574,10 @@ MidiStreamView::update_rec_regions (boost::shared_ptr data, nframes_t /* draw events */ MidiRegionView* mrv = (MidiRegionView*)iter->second; - for (size_t i=0; i < data->n_notes(); ++i) { + for (MidiModel::Notes::const_iterator i = data->notes().begin(); + i != data->notes().end(); ++i) { - // FIXME: slooooooooow! - - const boost::shared_ptr note = data->note_at(i); + const boost::shared_ptr& note = *i; if (note->length() > 0 && note->end_time() + region->position() > start) mrv->resolve_note(note->note(), note->end_time()); @@ -598,7 +597,6 @@ MidiStreamView::update_rec_regions (boost::shared_ptr data, nframes_t } mrv->add_note (note, !update_range); - } mrv->extend_active_notes(); diff --git a/libs/evoral/evoral/Sequence.hpp b/libs/evoral/evoral/Sequence.hpp index b4e11ba808..22d81b6948 100644 --- a/libs/evoral/evoral/Sequence.hpp +++ b/libs/evoral/evoral/Sequence.hpp @@ -61,7 +61,7 @@ public: template class Sequence : virtual public ControlSet { public: - Sequence(const TypeMap& type_map, size_t size=0); + Sequence(const TypeMap& type_map); void write_lock(); void write_unlock(); @@ -78,12 +78,8 @@ public: bool writing() const { return _writing; } void end_write(bool delete_stuck=false); - /** Resizes vector if necessary (NOT realtime safe) */ void append(const Event