Move EventRingBuffer to libardour.
[ardour.git] / libs / ardour / midi_playlist.cc
index 81b14dd9337da6576377c9d461b179d03cbebcaa..36b6fce75fa60d3cda434d0655e99b694c82d4df 100644 (file)
 
 #include <algorithm>
 #include <iostream>
+#include <utility>
 
 #include <stdlib.h>
 
-#include "pbd/error.h"
-
 #include "evoral/EventList.hpp"
 
-#include "ardour/configuration.h"
 #include "ardour/debug.h"
 #include "ardour/midi_model.h"
 #include "ardour/midi_playlist.h"
 #include "ardour/midi_region.h"
-#include "ardour/midi_ring_buffer.h"
-#include "ardour/session.h"
+#include "ardour/midi_state_tracker.h"
 #include "ardour/types.h"
 
 #include "i18n.h"
@@ -88,7 +85,8 @@ template<typename Time>
 struct EventsSortByTimeAndType {
     bool operator() (Evoral::Event<Time>* a, Evoral::Event<Time>* b) {
            if (a->time() == b->time()) {
-                   if (EventTypeMap::instance().type_is_midi (a->event_type()) && EventTypeMap::instance().type_is_midi (b->event_type())) {
+                   if (parameter_is_midi ((AutomationType)a->event_type()) &&
+                       parameter_is_midi ((AutomationType)b->event_type())) {
                            /* negate return value since we must return whether
                             * or not a should sort before b, not b before a
                             */
@@ -107,7 +105,7 @@ MidiPlaylist::read (Evoral::EventSink<framepos_t>& dst, framepos_t start, framec
           its OK to block (for short intervals).
        */
 
-       Playlist::RegionLock rl (this, false);
+       Playlist::RegionReadLock rl (this);
 
        DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("++++++ %1 .. %2  +++++++ %3 trackers +++++++++++++++++\n", 
                                                            start, start + dur, _note_trackers.size()));
@@ -257,10 +255,7 @@ MidiPlaylist::read (Evoral::EventSink<framepos_t>& dst, framepos_t start, framec
                        } else {
 
                                if (new_tracker) {
-                                       pair<Region*,MidiStateTracker*> newpair;
-                                       newpair.first = mr.get();
-                                       newpair.second = tracker;
-                                       _note_trackers.insert (newpair).first;
+                                       _note_trackers.insert (make_pair (mr.get(), tracker));
                                        DEBUG_TRACE (DEBUG::MidiPlaylistIO, "\tadded tracker to trackers\n");
                                }
                        }
@@ -295,7 +290,7 @@ MidiPlaylist::read (Evoral::EventSink<framepos_t>& dst, framepos_t start, framec
 void
 MidiPlaylist::clear_note_trackers ()
 {
-       Playlist::RegionLock rl (this, false);
+       Playlist::RegionWriteLock rl (this, false);
 
        for (NoteTrackers::iterator n = _note_trackers.begin(); n != _note_trackers.end(); ++n) {
                delete n->second;
@@ -367,7 +362,7 @@ MidiPlaylist::destroy_region (boost::shared_ptr<Region> region)
        bool changed = false;
 
        {
-               RegionLock rlock (this);
+               RegionWriteLock rlock (this);
                RegionList::iterator i;
                RegionList::iterator tmp;
 
@@ -401,7 +396,7 @@ MidiPlaylist::contained_automation()
           its OK to block (for short intervals).
        */
 
-       Playlist::RegionLock rl (this, false);
+       Playlist::RegionReadLock rl (this);
        set<Evoral::Parameter> ret;
 
        for (RegionList::const_iterator r = regions.begin(); r != regions.end(); ++r) {