From 166ef64e3db4ab72b7b1e7455234e2b9ceddf6d8 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 2 Feb 2009 02:36:05 +0000 Subject: Make (MIDI) event time stamp type a template parameter. git-svn-id: svn://localhost/ardour2/branches/3.0@4473 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_buffer.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'libs/ardour/ardour/midi_buffer.h') diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 36610c61cb..9c5bb294c3 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -32,6 +32,8 @@ namespace ARDOUR { class MidiBuffer : public Buffer { public: + typedef double TimeType; + MidiBuffer(size_t capacity); ~MidiBuffer(); @@ -41,7 +43,7 @@ public: void copy(const MidiBuffer& copy); - bool push_back(const Evoral::MIDIEvent& event); + bool push_back(const Evoral::MIDIEvent& event); bool push_back(const jack_midi_event_t& event); uint8_t* reserve(double time, size_t size); @@ -54,14 +56,14 @@ public: struct iterator_base { iterator_base(B& b, size_t o) : buffer(b), offset(o) {} inline E operator*() const { - uint8_t* ev_start = buffer._data + offset + sizeof(Evoral::EventTime); + uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); return E(EventTypeMap::instance().midi_event_type(*ev_start), - *(Evoral::EventTime*)(buffer._data + offset), + *(TimeType*)(buffer._data + offset), Evoral::midi_event_size(*ev_start) + 1, ev_start); } inline iterator_base& operator++() { - uint8_t* ev_start = buffer._data + offset + sizeof(Evoral::EventTime); - offset += sizeof(Evoral::EventTime) + Evoral::midi_event_size(*ev_start) + 1; + uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); + offset += sizeof(TimeType) + Evoral::midi_event_size(*ev_start) + 1; return *this; } inline bool operator!=(const iterator_base& other) const { @@ -71,8 +73,8 @@ public: size_t offset; }; - typedef iterator_base iterator; - typedef iterator_base const_iterator; + typedef iterator_base< MidiBuffer, Evoral::MIDIEvent > iterator; + typedef iterator_base< const MidiBuffer, const Evoral::MIDIEvent > const_iterator; iterator begin() { return iterator(*this, 0); } iterator end() { return iterator(*this, _size); } @@ -81,8 +83,8 @@ public: const_iterator end() const { return const_iterator(*this, _size); } private: - friend class iterator_base; - friend class iterator_base; + friend class iterator_base< MidiBuffer, Evoral::MIDIEvent >; + friend class iterator_base< const MidiBuffer, const Evoral::MIDIEvent >; size_t _size; ///< Size in bytes of used portion of _data uint8_t* _data; ///< timestamp, event, timestamp, event, ... -- cgit v1.2.3