use newly-public libsmf functions for variable length quantities to load+store MIDI...
[ardour.git] / libs / evoral / src / Event.cpp
index d309d8a0f778e452137033eb2c16ecb9200251e1..b886d4b39e8daa7c496a96d5873cdb6fc1e3a7e0 100644 (file)
@@ -1,34 +1,57 @@
 /* This file is part of Evoral.
  * Copyright (C) 2008 Dave Robillard <http://drobilla.net>
  * Copyright (C) 2000-2008 Paul Davis
- * 
+ *
  * Evoral is free software; you can redistribute it and/or modify it under the
  * terms of the GNU General Public License as published by the Free Software
  * Foundation; either version 2 of the License, or (at your option) any later
  * version.
- * 
+ *
  * Evoral is distributed in the hope that it will be useful, but WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for details.
- * 
+ *
  * You should have received a copy of the GNU General Public License along
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include <glib.h>
 #include "evoral/Event.hpp"
 
 namespace Evoral {
 
+static event_id_t _event_id_counter = 0;
+
+event_id_t
+event_id_counter()
+{
+        return g_atomic_int_get (&_event_id_counter); 
+}
+
+void 
+init_event_id_counter(event_id_t n) 
+{ 
+        g_atomic_int_set (&_event_id_counter, n); 
+}
+
+event_id_t
+next_event_id ()
+{
+        return g_atomic_int_exchange_and_add (&_event_id_counter, 1);
+}
+
 #ifdef EVORAL_EVENT_ALLOC
 
 template<typename Timestamp>
 Event<Timestamp>::Event(EventType type, Timestamp time, uint32_t size, uint8_t* buf, bool alloc)
-       : _type(type)
-       , _time(time)
+        : _type(type)
+       , _original_time(time)
+       , _nominal_time(time)
        , _size(size)
        , _buf(buf)
        , _owns_buf(alloc)
+        , _id (-1)
 {
        if (alloc) {
                _buf = (uint8_t*)malloc(_size);
@@ -43,10 +66,12 @@ Event<Timestamp>::Event(EventType type, Timestamp time, uint32_t size, uint8_t*
 template<typename Timestamp>
 Event<Timestamp>::Event(const Event& copy, bool owns_buf)
        : _type(copy._type)
-       , _time(copy._time)
+       , _original_time(copy._original_time)
+       , _nominal_time(copy._nominal_time)
        , _size(copy._size)
        , _buf(copy._buf)
        , _owns_buf(owns_buf)
+        , _id (copy.id())
 {
        if (owns_buf) {
                _buf = (uint8_t*)malloc(_size);
@@ -67,7 +92,8 @@ Event<Timestamp>::~Event() {
 
 #endif // EVORAL_EVENT_ALLOC
 
-template class Event<double>;
+template class Event<Evoral::MusicalTime>;
+template class Event<uint32_t>;
 
 } // namespace Evoral