Skip to content

Instantly share code, notes, and snippets.

@eira-fransham
Created May 9, 2018 14:36
Show Gist options
  • Save eira-fransham/43707776b5416b73061f2cb9b86184ea to your computer and use it in GitHub Desktop.
Save eira-fransham/43707776b5416b73061f2cb9b86184ea to your computer and use it in GitHub Desktop.
pub struct VecBuilder<'a, T: 'a> {
inner: *mut Vec<T>,
_marker: std::marker::PhantomData<&'a mut Vec<T>>,
}
impl<'a, T> VecBuilder<'a, T> {
pub fn new(v: &'a mut Vec<T>) -> Self {
VecBuilder {
inner: v,
_marker: Default::default(),
}
}
pub fn push(&self, val: T) {
let vec: &mut Vec<T> = unsafe { &mut *self.inner };
vec.push(val);
}
}
#[cfg(test)]
mod tests {
use VecBuilder;
#[test]
fn it_works() {
let mut v = Vec::new();
{
let builder = VecBuilder::new(&mut v);
let a = || {
builder.push(0);
};
let b = || {
builder.push(1);
};
a();
b();
a();
b();
}
assert_eq!(&v, &[0, 1, 0, 1]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment