Skip to main content

ShmMap

Struct ShmMap 

Source
pub struct ShmMap { /* private fields */ }
Expand description

A typed map of shared-memory variable names to their resolved pointers.

_context keeps the underlying Shmem mapping alive for as long as any ShmMap clone exists. The raw pointers in pointers are only valid while that mapping is mapped into this process’s address space, so the map itself must own a reference to it.

Implementations§

Source§

impl ShmMap

Source

pub fn new(pointers: HashMap<String, ShmPtr>) -> Self

Build an ShmMap with no anchored context. Only safe when the caller guarantees that the pointers’ backing memory outlives every ShmMap clone (e.g. pointers into a static buffer, or in unit tests). Prefer with_context for anything sourced from ShmContext::resolve.

Source

pub fn with_context( pointers: HashMap<String, ShmPtr>, context: Arc<ShmContext>, ) -> Self

Build an ShmMap that anchors its lifetime to context. The Arc keeps the Shmem mapping alive even if the original owner (e.g. IpcClient::shm_context) replaces or drops its reference.

Source

pub fn get<T>(&self, name: &str) -> Option<*mut T>

Get a typed pointer to a variable.

Source

pub fn get_raw(&self, name: &str) -> Option<usize>

Get the raw address of a variable.

Source

pub fn data_type(&self, name: &str) -> Option<&str>

The data type the server declared for name, when this map was built from an ShmContext. None for a context-less map, or an unknown name.

get/read/write are untyped: nothing checks that T matches the variable, and a too-wide write silently corrupts whatever the server allocated next. Check this first when the type comes from config rather than a compile-time constant.

Source

pub unsafe fn read<T: Copy>(&self, name: &str) -> Option<T>

Read a value from shared memory.

§Safety

Caller must ensure T matches the type of data at the pointer.

Source

pub unsafe fn write<T: Copy>(&self, name: &str, value: T) -> bool

Write a value to shared memory.

§Safety

Caller must ensure T matches the type of data at the pointer.

Source

pub fn contains(&self, name: &str) -> bool

Check if a variable name exists in the map.

Source

pub fn len(&self) -> usize

Return the number of resolved pointers.

Source

pub fn is_empty(&self) -> bool

Return true if no pointers were resolved.

Source

pub fn iter(&self) -> impl Iterator<Item = (&String, &ShmPtr)>

Iterate over all (name, pointer) entries.

Trait Implementations§

Source§

impl Clone for ShmMap

Source§

fn clone(&self) -> ShmMap

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ShmMap

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V