semaphore_rs_storage/
lib.rs1use std::ops::{Deref, DerefMut};
2
3mod mmap_vec;
4
5use bytemuck::Pod;
6pub use mmap_vec::MmapVec;
7
8pub trait GenericStorage<T>:
9    Deref<Target = [T]> + DerefMut<Target = [T]> + Extend<T> + Send + Sync
10{
11    fn push(&mut self, value: T);
12
13    fn extend_from_slice(&mut self, slice: &[T]);
14
15    fn clear(&mut self);
16}
17
18impl<T: Send + Sync + Copy> GenericStorage<T> for Vec<T> {
19    fn push(&mut self, value: T) {
20        self.push(value);
21    }
22
23    fn extend_from_slice(&mut self, slice: &[T]) {
24        Vec::extend_from_slice(self, slice);
25    }
26
27    fn clear(&mut self) {
28        self.clear();
29    }
30}
31
32impl<T: Send + Sync + Pod> GenericStorage<T> for MmapVec<T> {
33    fn push(&mut self, value: T) {
34        self.push(value);
35    }
36
37    fn extend_from_slice(&mut self, slice: &[T]) {
38        self.extend_from_slice(slice);
39    }
40
41    fn clear(&mut self) {
42        self.clear();
43    }
44}