Separate MidiBuffer and AudioBuffer into separate headers (trims the dependency tree...
[ardour.git] / libs / ardour / ardour / midi_model.h
1 /*
2     Copyright (C) 2006 Paul Davis
3         Author: Dave Robillard
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 */
20
21 #ifndef __ardour_midi_model_h__ 
22 #define __ardour_midi_model_h__
23
24 #include <boost/utility.hpp>
25 #include <ardour/types.h>
26 #include <ardour/midi_buffer.h>
27
28 namespace ARDOUR {
29
30 /** A dynamically resizable collection of MIDI events, sorted by time
31  */
32 class MidiModel : public boost::noncopyable {
33 public:
34         MidiModel(size_t size=0);
35         ~MidiModel();
36
37         void clear() { _events.clear(); }
38
39         /** Resizes vector if necessary (NOT realtime safe) */
40         void append(const MidiBuffer& data);
41         
42         /** Resizes vector if necessary (NOT realtime safe) */
43         void append(double time, size_t size, Byte* in_buffer);
44         
45         inline const MidiEvent& event_at(unsigned i) const { return _events[i]; }
46
47         inline size_t n_events() const { return _events.size(); }
48
49 private:
50         std::vector<MidiEvent> _events;
51 };
52
53 } /* namespace ARDOUR */
54
55 #endif /* __ardour_midi_model_h__ */
56