summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midi_buffer.h
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2009-02-03 08:46:24 +0000
committerHans Baier <hansfbaier@googlemail.com>2009-02-03 08:46:24 +0000
commit5c73fc42c46ffd82789eef6647a820fe6b24d0e7 (patch)
tree695c1e1192b9226ed0d2fd5f9d90e3cf27f05a06 /libs/ardour/ardour/midi_buffer.h
parent5e3cced3e776bca1444c6b5647f89c6fd0d65e00 (diff)
* 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
Diffstat (limited to 'libs/ardour/ardour/midi_buffer.h')
-rw-r--r--libs/ardour/ardour/midi_buffer.h26
1 files changed, 14 insertions, 12 deletions
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<typename B, typename E>
+ template<typename BufferType, typename MIDIEventType>
struct iterator_base {
- iterator_base<B,E>(B& b, size_t o) : buffer(b), offset(o) {}
- inline E operator*() const {
+ iterator_base<BufferType, MIDIEventType>(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<B,E>& operator++() {
+ inline iterator_base<BufferType, MIDIEventType>& 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<B,E>& other) const {
+ inline bool operator!=(const iterator_base<BufferType, MIDIEventType>& 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<TimeType> > iterator;