From 5c73fc42c46ffd82789eef6647a820fe6b24d0e7 Mon Sep 17 00:00:00 2001 From: Hans Baier Date: Tue, 3 Feb 2009 08:46:24 +0000 Subject: * midi_event_size(uchar status): return size including status / handle sysex git-svn-id: svn://localhost/ardour2/branches/3.0@4486 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_buffer.h | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 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 88aac0af64..f90cbfd8e3 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -52,27 +52,29 @@ public: bool merge(const MidiBuffer& a, const MidiBuffer& b); bool merge_in_place(const MidiBuffer &other); - template + template struct iterator_base { - iterator_base(B& b, size_t o) : buffer(b), offset(o) {} - inline E operator*() const { + iterator_base(BufferType& b, size_t o) : buffer(b), offset(o) {} + inline MIDIEventType operator*() const { uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); - assert(Evoral::midi_event_size(*ev_start) >= 0); - return E(EventTypeMap::instance().midi_event_type(*ev_start), + int event_size = Evoral::midi_event_size(ev_start); + assert(event_size >= 0); + return MIDIEventType(EventTypeMap::instance().midi_event_type(*ev_start), *((TimeType*)(buffer._data + offset)), - Evoral::midi_event_size(*ev_start) + 1, ev_start); + event_size, ev_start); } - inline iterator_base& operator++() { + inline iterator_base& operator++() { uint8_t* ev_start = buffer._data + offset + sizeof(TimeType); - assert(Evoral::midi_event_size(*ev_start) >= 0); - offset += sizeof(TimeType) + Evoral::midi_event_size(*ev_start) + 1; + int event_size = Evoral::midi_event_size(ev_start); + assert(event_size >= 0); + offset += sizeof(TimeType) + event_size; return *this; } - inline bool operator!=(const iterator_base& other) const { + inline bool operator!=(const iterator_base& other) const { return (&buffer != &other.buffer) || (offset != other.offset); } - B& buffer; - size_t offset; + BufferType& buffer; + size_t offset; }; typedef iterator_base< MidiBuffer, Evoral::MIDIEvent > iterator; -- cgit v1.2.3