Skip to main content

buffer_core/
shm.rs

1use core_types::BufferId;
2use memmap2::Mmap;
3
4mod config;
5mod header;
6mod rate_limiter;
7mod reader;
8mod segment_io;
9mod writer;
10
11pub use config::{ShmRateLimitConfig, ShmTransportConfig};
12use rate_limiter::TokenBucket;
13
14#[derive(Clone, Copy, Debug, Eq, PartialEq)]
15pub struct SharedMemoryBufferRef {
16    pub buffer_id: BufferId,
17    pub offset: usize,
18    pub len: usize,
19}
20
21#[derive(Debug)]
22pub struct SharedMemoryLease {
23    mmap: Mmap,
24    offset: usize,
25    len: usize,
26}
27
28impl SharedMemoryLease {
29    pub fn as_slice(&self) -> &[u8] {
30        &self.mmap[self.offset..self.offset + self.len]
31    }
32
33    pub fn len(&self) -> usize {
34        self.len
35    }
36
37    pub fn is_empty(&self) -> bool {
38        self.len == 0
39    }
40}
41
42pub struct SharedMemoryWriter {
43    cfg: ShmTransportConfig,
44    next_buffer_id: u64,
45    rate_limiter: Option<TokenBucket>,
46}
47
48pub struct SharedMemoryReader {
49    cfg: ShmTransportConfig,
50}