shredder 0.2.0

Garbage collection as a library for Rust
Documentation
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;

use shredder::{Finalize, FinalizeFields};

struct FinalizeMark {
    finalized: Arc<AtomicBool>,
}

unsafe impl Finalize for FinalizeMark {
    unsafe fn finalize(&mut self) {
        self.finalized.store(true, Ordering::SeqCst)
    }
}

#[derive(Finalize, FinalizeFields)]
struct Test {
    m: FinalizeMark,
}

#[test]
fn finalize_derive_works() {
    let finalized = Arc::new(AtomicBool::new(false));
    let mut v = Test {
        m: FinalizeMark {
            finalized: finalized.clone(),
        },
    };

    unsafe {
        v.finalize();
    }

    assert!(finalized.load(Ordering::SeqCst))
}

#[test]
fn finalize_fields_derive_works() {
    let finalized = Arc::new(AtomicBool::new(false));
    let mut v = Test {
        m: FinalizeMark {
            finalized: finalized.clone(),
        },
    };

    unsafe {
        v.finalize_fields();
    }

    assert!(finalized.load(Ordering::SeqCst))
}