pub struct UpdateBuffer<T: Sized + Clone> {
buffers: [T; 2],
old_index: usize,
new_index: usize,
}
impl<T: Sized + Clone> UpdateBuffer<T> {
pub fn from(initial: T) -> UpdateBuffer<T> {
UpdateBuffer {
buffers: [initial.clone(), initial],
old_index: 0,
new_index: 1,
}
}
pub fn new(&mut self) -> &mut T {
&mut self.buffers[self.new_index]
}
pub fn old(&self) -> &T {
&self.buffers[self.old_index]
}
pub fn swap_buffers(&mut self) {
if self.old_index == 1 {
self.old_index = 0;
self.new_index = 1;
} else {
self.old_index = 1;
self.new_index = 0;
}
}
}