summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midi_buffer.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-07-20 05:37:24 +0000
committerDavid Robillard <d@drobilla.net>2007-07-20 05:37:24 +0000
commit823a1d36c1694a220b3b581741ffc92990e03eeb (patch)
tree92217d9f0fdac12fb6fb8bf0c2257374825a128c /libs/ardour/ardour/midi_buffer.h
parent58d8a71597a0c83c34ecc811d0c87fca61699180 (diff)
Remove random access interface from MidiBuffer, towards killing fixed/limited event size assumption.
git-svn-id: svn://localhost/ardour2/trunk@2159 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/midi_buffer.h')
-rw-r--r--libs/ardour/ardour/midi_buffer.h38
1 files changed, 35 insertions, 3 deletions
diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h
index 79a8391e72..17feea6ff1 100644
--- a/libs/ardour/ardour/midi_buffer.h
+++ b/libs/ardour/ardour/midi_buffer.h
@@ -43,12 +43,44 @@ public:
bool push_back(const jack_midi_event_t& event);
Byte* reserve(double time, size_t size);
- const MidiEvent& operator[](size_t i) const { assert(i < _size); return _events[i]; }
- MidiEvent& operator[](size_t i) { assert(i < _size); return _events[i]; }
-
bool merge(const MidiBuffer& a, const MidiBuffer& b);
+
+ struct iterator {
+ iterator(MidiBuffer& b, size_t i) : buffer(b), index(i) {}
+
+ inline MidiEvent& operator*() const { return buffer[index]; }
+ inline iterator& operator++() { ++index; return *this; } // prefix
+ inline bool operator!=(const iterator& other) const { return index != other.index; }
+
+ MidiBuffer& buffer;
+ size_t index;
+ };
+
+ struct const_iterator {
+ const_iterator(const MidiBuffer& b, size_t i) : buffer(b), index(i) {}
+
+ inline const MidiEvent& operator*() const { return buffer[index]; }
+ inline const_iterator& operator++() { ++index; return *this; } // prefix
+ inline bool operator!=(const const_iterator& other) const { return index != other.index; }
+
+ const MidiBuffer& buffer;
+ size_t index;
+ };
+
+ iterator begin() { return iterator(*this, 0); }
+ iterator end() { return iterator(*this, _size); }
+
+ const_iterator begin() const { return const_iterator(*this, 0); }
+ const_iterator end() const { return const_iterator(*this, _size); }
private:
+
+ friend class iterator;
+ friend class const_iterator;
+
+ const MidiEvent& operator[](size_t i) const { assert(i < _size); return _events[i]; }
+ MidiEvent& operator[](size_t i) { assert(i < _size); return _events[i]; }
+
// FIXME: Jack needs to tell us this
static const size_t MAX_EVENT_SIZE = 4; // bytes