diff options
author | David Robillard <d@drobilla.net> | 2009-10-19 15:23:42 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-10-19 15:23:42 +0000 |
commit | cb8407d26fb8863b2434aa6006da32c3f732e663 (patch) | |
tree | 78d697608d1e13a37ec5de6046b15d6f3ad10701 /gtk2_ardour/midi_region_view.cc | |
parent | 7b94110c545415af8437fc6631e7663ebb5c28f3 (diff) |
Use set over vector for Sequence::Notes, for logarithmic search by time.
git-svn-id: svn://localhost/ardour2/branches/3.0@5798 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 19 |
1 files changed, 7 insertions, 12 deletions
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<NoteType> (new NoteType (*((*i)->note().get())))); + notes.insert (boost::shared_ptr<NoteType> (new NoteType (*((*i)->note().get())))); } - /* sort them into time order */ - - Evoral::Sequence<Evoral::MusicalTime>::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<NoteType> 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()); } } } |