use crate::message::MidiMessage;
#[derive(Debug)]
pub struct MidiMessageBuffer {
messages: Vec<MidiMessage>,
count: usize,
}
impl MidiMessageBuffer {
pub fn new(capacity: usize) -> Self {
Self {
messages: Vec::with_capacity(capacity),
count: 0,
}
}
#[inline]
pub fn clear(&mut self) {
self.count = 0;
}
#[inline]
pub fn push(&mut self, message: MidiMessage) {
if self.count < self.messages.capacity() {
if self.count < self.messages.len() {
self.messages[self.count] = message;
} else {
self.messages.push(message);
}
self.count += 1;
}
}
#[inline]
pub fn len(&self) -> usize {
self.count
}
#[inline]
pub fn is_empty(&self) -> bool {
self.count == 0
}
#[inline]
pub fn capacity(&self) -> usize {
self.messages.capacity()
}
#[inline]
pub fn iter(&self) -> impl Iterator<Item = &MidiMessage> {
self.messages[..self.count].iter()
}
#[inline]
pub fn as_slice(&self) -> &[MidiMessage] {
&self.messages[..self.count]
}
}
impl Default for MidiMessageBuffer {
fn default() -> Self {
Self::new(256)
}
}