+
+template<typename T>
+void
+MidiRingBuffer<T>::flush (framepos_t /*start*/, framepos_t end)
+{
+ const size_t prefix_size = sizeof(T) + sizeof(Evoral::EventType) + sizeof(uint32_t);
+
+ while (this->read_space() >= prefix_size) {
+ uint8_t peekbuf[prefix_size];
+ bool success;
+ uint32_t ev_size;
+ T ev_time;
+
+ success = this->peek (peekbuf, prefix_size);
+ /* this cannot fail, because we've already verified that there
+ is prefix_space to read
+ */
+ assert (success);
+
+ ev_time = *((T*) peekbuf);
+
+ if (ev_time >= end) {
+ break;
+ }
+
+ ev_size = *((uint32_t*)(peekbuf + sizeof(T) + sizeof (Evoral::EventType)));
+ this->increment_read_ptr (prefix_size);
+ this->increment_read_ptr (ev_size);
+ }
+}
+