Make (MIDI) event time stamp type a template parameter.
[ardour.git] / libs / evoral / src / Event.cpp
1 /* This file is part of Evoral.
2  * Copyright (C) 2008 Dave Robillard <http://drobilla.net>
3  * Copyright (C) 2000-2008 Paul Davis
4  * 
5  * Evoral is free software; you can redistribute it and/or modify it under the
6  * terms of the GNU General Public License as published by the Free Software
7  * Foundation; either version 2 of the License, or (at your option) any later
8  * version.
9  * 
10  * Evoral is distributed in the hope that it will be useful, but WITHOUT ANY
11  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for details.
13  * 
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 #include "evoral/Event.hpp"
20
21 namespace Evoral {
22
23 #ifdef EVORAL_EVENT_ALLOC
24
25 template<typename T>
26 Event<T>::Event(uint32_t tid, T t, uint32_t s, uint8_t* b, bool owns_buf)
27         : _type(tid)
28         , _time(t)
29         , _size(s)
30         , _buf(b)
31         , _owns_buf(owns_buf)
32 {
33         if (owns_buf) {
34                 _buf = (uint8_t*)malloc(_size);
35                 if (b) {
36                         memcpy(_buf, b, _size);
37                 } else {
38                         memset(_buf, 0, _size);
39                 }
40         }
41 }
42
43 template<typename T>
44 Event<T>::Event(const Event& copy, bool owns_buf)
45         : _type(copy._type)
46         , _time(copy._time)
47         , _size(copy._size)
48         , _buf(copy._buf)
49         , _owns_buf(owns_buf)
50 {
51         if (owns_buf) {
52                 _buf = (uint8_t*)malloc(_size);
53                 if (copy._buf) {
54                         memcpy(_buf, copy._buf, _size);
55                 } else {
56                         memset(_buf, 0, _size);
57                 }
58         }
59 }
60
61 template<typename T>
62 Event<T>::~Event() {
63         if (_owns_buf) {
64                 free(_buf);
65         }
66 }
67
68 #endif // EVORAL_EVENT_ALLOC
69
70 template class Event<double>;
71
72 } // namespace Evoral
73