rodeo 0.2.1

Fast dropping arena based on bumpalo
Documentation
use std::alloc::Layout;
use std::sync::{Arc, Mutex};

use bumpalo::{AllocErr, Bump};
use rodeo::{ArenaAlloc, Rodeo, HEADER_LAYOUT};

struct Alloc(Bump, Arc<Mutex<Vec<Layout>>>);

impl ArenaAlloc for Alloc {
    type Error = AllocErr;
    fn try_alloc_layout(&self, layout: Layout) -> Result<std::ptr::NonNull<u8>, Self::Error> {
        let mut guard = self.1.lock().unwrap();
        let result = self.0.try_alloc_layout(layout)?;
        guard.push(layout);
        Ok(result)
    }
}

#[test]
fn test_tracing() {
    let layouts = Arc::new(Mutex::new(Vec::new()));
    let rodeo = Rodeo::with_allocator(Alloc(Bump::new(), layouts.clone()));

    let _ = rodeo.alloc(1_u32);

    let _ = rodeo.alloc(Box::new(40_u64));

    let _ = rodeo.alloc(());

    let g = layouts.lock().unwrap();
    assert_eq!(
        &[
            Layout::new::<u32>(),
            HEADER_LAYOUT.extend(Layout::new::<Box<u64>>()).unwrap().0,
            Layout::new::<()>(),
        ],
        g.as_slice()
    );
}