indexbus_abi/layouts/
shared.rs

1use crate::{caps, IndexbusAtomicU32, LayoutHeader};
2
3use super::common::{IndexQueue, MpscQueue, SlotPoolLayout};
4
5/// Shared events region (SPSC + MPSC) base layout.
6#[repr(C, align(64))]
7pub struct SharedLayout {
8    /// Common region header (magic/version/capabilities/layout size).
9    pub header: LayoutHeader,
10
11    /// 0 = uninitialized, 1 = initializing, 2 = initialized
12    pub initialized: IndexbusAtomicU32,
13    /// Padding (reserved).
14    pub pad0: u32,
15
16    /// Pad to 64 so `SlotPoolLayout` (align 64) starts at offset 64.
17    pub pad_to_64: [u8; 40],
18
19    /// Slot pool backing both the SPSC and MPSC queues.
20    pub slot_pool: SlotPoolLayout,
21    /// SPSC queue of slot indices.
22    pub queue: IndexQueue,
23    /// MPSC queue of slot indices.
24    pub mpsc_queue: MpscQueue,
25}
26
27impl SharedLayout {
28    /// Capabilities required for this region to be considered compatible.
29    pub const REQUIRED_CAPS: u32 = caps::INDEXBUS_CAP_SUPPORTS_EVENTS;
30}