rsgc 1.1.0

Concurrent GC library for Rust
Documentation
use crossbeam_deque::{Injector, Steal, Worker};

use crate::system::object::HeapObjectHeader;

pub struct ReferenceQueue {
    workers: Vec<Worker<Reference>>,
    injector: Injector<Reference>,
}

impl ReferenceQueue {
    pub fn new() -> Self {
        Self {
            workers: Vec::new(),
            injector: Injector::new(),
        }
    }

    pub fn add(&self, worker_id: usize, reference: Reference) {
        self.workers[worker_id].push(reference);
    }

    pub fn pop(&self, worker_id: usize) -> Option<Reference> {
        loop {
            match self.injector.steal_batch_and_pop(&self.workers[worker_id]) {
                Steal::Success(reference) => return Some(reference),
                Steal::Empty => break,
                Steal::Retry => continue,
            }
        }

        None
    }
}

pub struct Reference {
    
    referent: *mut *mut HeapObjectHeader,
}

unsafe impl Send for Reference {}

pub struct ReferenceProcessor {
    weak_reference_queue: ReferenceQueue,
}