diff options
author | David Robillard <d@drobilla.net> | 2009-02-01 03:15:31 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-01 03:15:31 +0000 |
commit | e666c8e98fb95a69afae8818f22c25094adae7eb (patch) | |
tree | 096ced3dde2248d17e48887f042c9f4465643bb2 /libs/ardour/midi_buffer.cc | |
parent | aaa91db6d9592684258267981e619b44cc2b7c40 (diff) |
Templateify MidiBuffer iterators (avoid code duplication since they're about to get less trivial).
Clean up MidiBuffer code.
git-svn-id: svn://localhost/ardour2/branches/3.0@4469 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_buffer.cc')
-rw-r--r-- | libs/ardour/midi_buffer.cc | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc index 1f5b0c5fa9..51f7dd43e6 100644 --- a/libs/ardour/midi_buffer.cc +++ b/libs/ardour/midi_buffer.cc @@ -35,10 +35,9 @@ MidiBuffer::MidiBuffer(size_t capacity) : Buffer(DataType::MIDI, capacity) , _events(0) , _data(0) -// , _owns_data(false) { if (capacity) { - resize (_capacity); + resize(_capacity); silence(_capacity); } } @@ -54,7 +53,7 @@ MidiBuffer::~MidiBuffer() } void -MidiBuffer::resize (size_t size) +MidiBuffer::resize(size_t size) { assert(size > 0); @@ -62,13 +61,8 @@ MidiBuffer::resize (size_t size) return; } - if (_data) { - free (_data); - } - - if (_events) { - free (_events); - } + free(_data); + free(_events); _size = 0; _capacity = size; @@ -116,7 +110,7 @@ MidiBuffer::read_from(const Buffer& src, nframes_t nframes, nframes_t offset) } // FIXME: slow - for (size_t i=0; i < msrc.size(); ++i) { + for (size_t i = 0; i < msrc.size(); ++i) { const Evoral::MIDIEvent& ev = msrc[i]; //cout << "MidiBuffer::read_from event type: " << int(ev.type()) // << " time: " << ev.time() << " buffer size: " << _size << endl; @@ -220,8 +214,9 @@ MidiBuffer::reserve(double time, size_t size) return 0; } - if (_size == _capacity) + if (_size == _capacity) { return 0; + } uint8_t* const write_loc = _data + (_size * MAX_EVENT_SIZE); @@ -251,27 +246,28 @@ MidiBuffer::silence(nframes_t dur, nframes_t offset) } bool -MidiBuffer::merge_in_place( const MidiBuffer &other ) +MidiBuffer::merge_in_place(const MidiBuffer &other) { - if( other.size() == 0 ) + if (other.size() == 0) { return true; + } - if( this->size() == 0 ) { - copy( other ); + if (this->size() == 0) { + copy(other); return true; } { - MidiBuffer merge_buffer( 0 ); + MidiBuffer merge_buffer(0); Evoral::MIDIEvent onstack_events[_capacity]; - uint8_t onstack_data[_capacity * MAX_EVENT_SIZE]; + uint8_t onstack_data[_capacity * MAX_EVENT_SIZE]; merge_buffer._events = onstack_events; merge_buffer._data = onstack_data; merge_buffer._size = 0; - bool retval = merge_buffer.merge( *this, other ); + bool retval = merge_buffer.merge(*this, other); - copy( merge_buffer ); + copy(merge_buffer); // set pointers to zero again, so destructor // does not end in calling free() for memory @@ -293,13 +289,14 @@ bool MidiBuffer::merge(const MidiBuffer& a, const MidiBuffer& b) { _size = 0; + + if (this == &a) { + merge_in_place(b); + } - // This is mostly the case :( - if( this == &a ) - merge_in_place( b ); - - if( this == &b ) - merge_in_place( a ); + if (this == &b) { + merge_in_place(a); + } size_t a_index = 0; size_t b_index = 0; |