lightning-containers 0.2.0

A set of lock-free data structures
Documentation
use bustle::*;
use lightning::map::{Map, ObjectMap, WordMap};
use smallvec::alloc::sync::Arc;
use std::alloc::System;
use std::collections::hash_map::DefaultHasher;
use std::hash::Hash;

#[derive(Clone)]
pub struct TestTable(Arc<WordMap<System, DefaultHasher>>);

impl Collection for TestTable {
    type Handle = Self;
    fn with_capacity(capacity: usize) -> Self {
        Self(Arc::new(WordMap::with_capacity(capacity)))
    }

    fn pin(&self) -> Self::Handle {
        self.clone()
    }
}

impl CollectionHandle for TestTable {
    type Key = u64;

    fn get(&mut self, key: &Self::Key) -> bool {
        let k = *key as usize;
        self.0.get(&k).is_some()
    }

    fn insert(&mut self, key: &Self::Key) -> bool {
        let k = *key as usize;
        self.0.insert(&k, k).is_none()
    }

    fn remove(&mut self, key: &Self::Key) -> bool {
        let k = *key as usize;
        self.0.remove(&k).is_some()
    }

    fn update(&mut self, key: &Self::Key) -> bool {
        let k = *key as usize;
        let map = &mut self.0;
        if map.contains_key(&k) {
            map.insert(&k, k);
            true
        } else {
            false
        }
    }
}