Move EventRingBuffer to libardour.
authorDavid Robillard <d@drobilla.net>
Sun, 30 Nov 2014 23:51:24 +0000 (18:51 -0500)
committerDavid Robillard <d@drobilla.net>
Mon, 1 Dec 2014 04:56:19 +0000 (23:56 -0500)
This is not used anywhere in Evoral and is just a wrapper around the PBD
RingBuffer anyway.  Towards a (once again?) independently buildable/testable
Evoral and fewer cross-dependencies.

13 files changed:
libs/ardour/MSVClibardour/ardour.vcproj
libs/ardour/ardour/async_midi_port.h
libs/ardour/ardour/event_ring_buffer.h [new file with mode: 0644]
libs/ardour/ardour/midi_diskstream.h
libs/ardour/ardour/midi_model.h
libs/ardour/ardour/midi_ring_buffer.h
libs/ardour/async_midi_port.cc
libs/ardour/midi_diskstream.cc
libs/ardour/midi_playlist.cc
libs/ardour/midi_source.cc
libs/evoral/MSVCevoral/evoral.vcproj
libs/evoral/evoral/EventRingBuffer.hpp [deleted file]
libs/evoral/evoral/OldSMF.hpp

index 724d1b1c346427c156515c764e6f53f260009787..59654107632a7c3d0d781f6c6871f33b6055d721 100644 (file)
                                RelativePath="..\ardour\element_importer.h"
                                >
                        </File>
+                       <File
+                               RelativePath="..\ardour\event_ring_buffer.h"
+                               >
+                       </File>
                        <File
                                RelativePath="..\ardour\event_type_map.h"
                                >
index d822081bd306b598d48f81e4660aa461be6b5a9a..7fab9e4186dfa3df045581300d142e6440d98912 100644 (file)
 #include "pbd/ringbuffer.h"
 
 #include "evoral/Event.hpp"
-#include "evoral/EventRingBuffer.hpp"
 
 #include "midi++/types.h"
 #include "midi++/parser.h"
 #include "midi++/port.h"
 
 #include "ardour/libardour_visibility.h"
+#include "ardour/event_ring_buffer.h"
 #include "ardour/midi_port.h"
 
 namespace ARDOUR {
@@ -88,7 +88,7 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port {
        bool                    have_timer;
        boost::function<framecnt_t (void)> timer;
        RingBuffer< Evoral::Event<double> > output_fifo;
-        Evoral::EventRingBuffer<MIDI::timestamp_t> input_fifo;
+        EventRingBuffer<MIDI::timestamp_t> input_fifo;
         Glib::Threads::Mutex output_fifo_lock;
 #ifndef PLATFORM_WINDOWS
        CrossThreadChannel xthread;
diff --git a/libs/ardour/ardour/event_ring_buffer.h b/libs/ardour/ardour/event_ring_buffer.h
new file mode 100644 (file)
index 0000000..c7344c5
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+    Copyright (C) 2006-2014 Paul Davis
+    Author: David Robillard
+
+    This program 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.
+
+    This program 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 more 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef __ardour_event_ring_buffer_h__
+#define __ardour_event_ring_buffer_h__
+
+#include <algorithm>
+#include <iostream>
+
+#include "pbd/ringbufferNPT.h"
+
+#include "evoral/EventSink.hpp"
+#include "evoral/types.hpp"
+
+namespace ARDOUR {
+
+/** A RingBuffer of events (generic time-stamped binary "blobs").
+ *
+ * This packs a timestamp, size, and size bytes of data flat into the buffer.
+ * Useful for MIDI events, OSC messages, etc.
+ *
+ * Note: the uint8_t template argument to RingBufferNPT<> indicates "byte
+ * oriented data", not anything particular linked to MIDI or any other
+ * possible interpretation of uint8_t.
+ */
+template<typename Time>
+class EventRingBuffer : public PBD::RingBufferNPT<uint8_t>
+                      , public Evoral::EventSink<Time> {
+public:
+
+       /** @param capacity Ringbuffer capacity in bytes.
+        */
+       EventRingBuffer(size_t capacity) : PBD::RingBufferNPT<uint8_t>(capacity)
+       {}
+
+       inline size_t capacity() const { return bufsize(); }
+
+       /** Peek at the ringbuffer (read w/o advancing read pointer).
+        * @return how much has been peeked (wraps around if read exceeds
+        * the end of the buffer):
+        * <pre>
+        * |===========--------------R=============================|
+        *            read-pointer---^
+        * </pre>
+        */
+       inline bool peek (uint8_t*, size_t size);
+
+       inline uint32_t write(Time  time, Evoral::EventType  type, uint32_t  size, const uint8_t* buf);
+       inline bool     read (Time* time, Evoral::EventType* type, uint32_t* size,       uint8_t* buf);
+};
+
+template<typename Time>
+inline bool
+EventRingBuffer<Time>::peek (uint8_t* buf, size_t size)
+{
+       PBD::RingBufferNPT<uint8_t>::rw_vector vec;
+
+       get_read_vector (&vec);
+
+       if (vec.len[0] + vec.len[1] < size) {
+               return false;
+       }
+
+       if (vec.len[0] > 0) {
+               memcpy (buf, vec.buf[0], std::min (vec.len[0], size));
+       }
+
+       if (vec.len[0] < size) {
+               if (vec.len[1]) {
+                       memcpy (buf + vec.len[0], vec.buf[1], size - vec.len[0]);
+               }
+       }
+
+       return true;
+}
+
+template<typename Time>
+inline bool
+EventRingBuffer<Time>::read(Time* time, Evoral::EventType* type, uint32_t* size, uint8_t* buf)
+{
+       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)time, sizeof (Time)) != sizeof (Time)) {
+               return false;
+       }
+
+       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)type, sizeof(Evoral::EventType)) != sizeof (Evoral::EventType)) {
+               return false;
+       }
+
+       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)size, sizeof(uint32_t)) != sizeof (uint32_t)) {
+               return false;
+       }
+
+       if (PBD::RingBufferNPT<uint8_t>::read (buf, *size) != *size) {
+               return false;
+       }
+
+       return true;
+}
+
+template<typename Time>
+inline uint32_t
+EventRingBuffer<Time>::write(Time time, Evoral::EventType type, uint32_t size, const uint8_t* buf)
+{
+       if (!buf || write_space() < (sizeof(Time) + sizeof(Evoral::EventType) + sizeof(uint32_t) + size)) {
+               return 0;
+       } else {
+               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&time, sizeof(Time));
+               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&type, sizeof(Evoral::EventType));
+               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&size, sizeof(uint32_t));
+               PBD::RingBufferNPT<uint8_t>::write (buf, size);
+               return size;
+       }
+}
+
+} // namespace ARDOUR
+
+#endif // __ardour_event_ring_buffer_h__
index 70b445411895cac80cfba3c85e38b9e8c4e0aa66..e8cc37028958a0e908a515ecf86ee01785b7e9ab 100644 (file)
@@ -36,8 +36,8 @@
 
 #include "ardour/ardour.h"
 #include "ardour/diskstream.h"
+#include "ardour/midi_buffer.h"
 #include "ardour/midi_playlist.h"
-#include "ardour/midi_ring_buffer.h"
 #include "ardour/utils.h"
 
 struct tm;
@@ -48,6 +48,7 @@ class IO;
 class MidiEngine;
 class MidiPort;
 class MidiRingbuffer;
+class MidiSource;
 class SMFSource;
 class Send;
 class Session;
index 31df5ef040d1ef237d5fafe45c65ca19f51b94f9..b5dc17346489df6082008cdca8a03060b8ff20c7 100644 (file)
@@ -30,7 +30,6 @@
 #include "ardour/libardour_visibility.h"
 #include "ardour/types.h"
 #include "ardour/midi_buffer.h"
-#include "ardour/midi_ring_buffer.h"
 #include "ardour/automatable_sequence.h"
 #include "ardour/libardour_visibility.h"
 #include "ardour/types.h"
index 13588e4f046fcb20ff44a8b21bda53fe88c6cc30..15e4d2689bafe9134a760779090e9121fecf066c 100644 (file)
@@ -22,8 +22,7 @@
 #include <iostream>
 #include <algorithm>
 
-#include "evoral/EventRingBuffer.hpp"
-
+#include "ardour/event_ring_buffer.h"
 #include "ardour/libardour_visibility.h"
 #include "ardour/types.h"
 #include "ardour/midi_state_tracker.h"
@@ -41,12 +40,10 @@ class MidiBuffer;
  * [timestamp][type][size][size bytes of raw MIDI][timestamp][type][size](etc...)
  */
 template<typename T>
-class /*LIBARDOUR_API*/ MidiRingBuffer : public Evoral::EventRingBuffer<T> {
+class /*LIBARDOUR_API*/ MidiRingBuffer : public EventRingBuffer<T> {
 public:
-       /** @param size Size in bytes.
-        */
-       MidiRingBuffer(size_t size)
-               : Evoral::EventRingBuffer<T>(size) {}
+       /** @param size Size in bytes. */
+       MidiRingBuffer(size_t size) : EventRingBuffer<T>(size) {}
 
        inline bool read_prefix(T* time, Evoral::EventType* type, uint32_t* size);
        inline bool read_contents(uint32_t size, uint8_t* buf);
index ce32fe2ccc4d7e28a3bd2324c4f3cd42a0b768a9..4ce1bfefbed3cfbeed818ff4f70d2aba8f99ac1c 100644 (file)
@@ -37,10 +37,6 @@ using namespace ARDOUR;
 using namespace std;
 using namespace PBD;
 
-namespace Evoral {
-       template class EventRingBuffer<MIDI::timestamp_t>;
-}
-
 pthread_t AsyncMIDIPort::_process_thread;
 
 #define port_engine AudioEngine::instance()->port_engine()
index 40d333d584a701542881de734288e723f65fe858..648c67886db5cd95022b3ec405d96abc05f55b87 100644 (file)
@@ -47,6 +47,7 @@
 #include "ardour/midi_playlist.h"
 #include "ardour/midi_port.h"
 #include "ardour/midi_region.h"
+#include "ardour/midi_ring_buffer.h"
 #include "ardour/playlist_factory.h"
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
index 0261f06ceb9d515179a3309de165ca42ad274797..36b6fce75fa60d3cda434d0655e99b694c82d4df 100644 (file)
@@ -31,6 +31,7 @@
 #include "ardour/midi_model.h"
 #include "ardour/midi_playlist.h"
 #include "ardour/midi_region.h"
+#include "ardour/midi_state_tracker.h"
 #include "ardour/types.h"
 
 #include "i18n.h"
index 1c050733c26fa2050b01d95eefc9dfde929c4ce5..0f3df97f9b1216c8587988544013cbfb90ae393b 100644 (file)
@@ -34,6 +34,8 @@
 #include "pbd/pthread_utils.h"
 #include "pbd/basename.h"
 
+#include "evoral/EventSink.hpp"
+
 #include "ardour/debug.h"
 #include "ardour/midi_model.h"
 #include "ardour/midi_state_tracker.h"
index 41ebb20390e7f83f0b151e3321dd7c384a1b9b55..b82f02becee83e0a1c0bf139bdf0814d1053c981 100644 (file)
                                RelativePath="..\evoral\EventList.hpp"
                                >
                        </File>
-                       <File
-                               RelativePath="..\evoral\EventRingBuffer.hpp"
-                               >
-                       </File>
                        <File
                                RelativePath="..\evoral\EventSink.hpp"
                                >
diff --git a/libs/evoral/evoral/EventRingBuffer.hpp b/libs/evoral/evoral/EventRingBuffer.hpp
deleted file mode 100644 (file)
index df9e6aa..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/* This file is part of Evoral.
- * Copyright (C) 2008 David Robillard <http://drobilla.net>
- *
- * 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
- */
-
-#ifndef EVORAL_EVENT_RING_BUFFER_HPP
-#define EVORAL_EVENT_RING_BUFFER_HPP
-
-#include <iostream>
-
-#include "pbd/ringbufferNPT.h"
-
-#include "evoral/visibility.h"
-#include "evoral/EventSink.hpp"
-#include "evoral/types.hpp"
-
-using namespace std;
-
-namespace Evoral {
-
-/** A RingBuffer of events (generic time-stamped binary "blobs").
- *
- * This packs a timestamp, size, and size bytes of data flat into the buffer.
- * Useful for MIDI events, OSC messages, etc.
- *
- * Note: the uint8_t template argument to RingBufferNPT<> indicates "byte
- * oriented data", not anything particular linked to MIDI or any other
- * possible interpretation of uint8_t.
- */
-template<typename Time>
-class /*LIBEVORAL_API*/ EventRingBuffer : public PBD::RingBufferNPT<uint8_t>, public Evoral::EventSink<Time> {
-public:
-
-       /** @param capacity Ringbuffer capacity in bytes.
-        */
-       EventRingBuffer(size_t capacity) : PBD::RingBufferNPT<uint8_t>(capacity)
-       {}
-
-       inline size_t capacity() const { return bufsize(); }
-
-       /** Peek at the ringbuffer (read w/o advancing read pointer).
-        * @return how much has been peeked (wraps around if read exceeds
-        * the end of the buffer):
-        * <pre>
-        * |===========--------------R=============================|
-        *            read-pointer---^
-        * </pre>
-        */
-       inline bool peek (uint8_t*, size_t size);
-
-       inline uint32_t write(Time  time, EventType  type, uint32_t  size, const uint8_t* buf);
-       inline bool     read (Time* time, EventType* type, uint32_t* size,       uint8_t* buf);
-};
-
-template<typename Time>
-inline bool
-EventRingBuffer<Time>::peek (uint8_t* buf, size_t size)
-{
-       PBD::RingBufferNPT<uint8_t>::rw_vector vec;
-
-       get_read_vector (&vec);
-
-       if (vec.len[0] + vec.len[1] < size) {
-               return false;
-       }
-
-       if (vec.len[0] > 0) {
-               memcpy (buf, vec.buf[0], min (vec.len[0], size));
-       }
-
-       if (vec.len[0] < size) {
-               if (vec.len[1]) {
-                       memcpy (buf + vec.len[0], vec.buf[1], size - vec.len[0]);
-               }
-       }
-
-       return true;
-}
-
-template<typename Time>
-inline bool
-EventRingBuffer<Time>::read(Time* time, EventType* type, uint32_t* size, uint8_t* buf)
-{
-       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)time, sizeof (Time)) != sizeof (Time)) {
-               return false;
-       }
-
-       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)type, sizeof(EventType)) != sizeof (EventType)) {
-               return false;
-       }
-
-       if (PBD::RingBufferNPT<uint8_t>::read ((uint8_t*)size, sizeof(uint32_t)) != sizeof (uint32_t)) {
-               return false;
-       }
-
-       if (PBD::RingBufferNPT<uint8_t>::read (buf, *size) != *size) {
-               return false;
-       }
-
-       return true;
-}
-
-
-template<typename Time>
-inline uint32_t
-EventRingBuffer<Time>::write(Time time, EventType type, uint32_t size, const uint8_t* buf)
-{
-       if (!buf || write_space() < (sizeof(Time) + sizeof(EventType) + sizeof(uint32_t) + size)) {
-               return 0;
-       } else {
-               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&time, sizeof(Time));
-               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&type, sizeof(EventType));
-               PBD::RingBufferNPT<uint8_t>::write ((uint8_t*)&size, sizeof(uint32_t));
-               PBD::RingBufferNPT<uint8_t>::write (buf, size);
-               return size;
-       }
-}
-
-
-} // namespace Evoral
-
-#endif // EVORAL_EVENT_RING_BUFFER_HPP
-
index ef1c751d0467d5046cbbedbafa15431a87c230ba..814f2a06c9f28f6448ebf998cd239fa83bec3369 100644 (file)
@@ -24,8 +24,6 @@
 namespace Evoral {
 
 template<typename Time> class Event;
-template<typename Time> class EventRingBuffer;
-
 
 /** Standard Midi File (Type 0)
  */