Expand description
§iceoryx2 Building Blocks (BB) Container
This is a support library for iceoryx2 which comes with containers that are compatible with shared memory and can be used to construct custom payload types for inter-process communication.
Most containers come in 3 variations:
FixedSize*Container*
, compile-time fixed size version. The capacity must be known at compile time. Those fixed-size constructs are always self-contained, meaning that the required memory is part of the constructs and usually stored in some kind of array.Relocatable*Container*
, run-time fixed size version that is shared memory compatible. The capacity must be known when the object is created. This object is not movable!*Container*
, run-time fixed size version that is not shared memory compatible but can be moved. The memory is by default stored on the heap.
§Example
§1. Compile-Time FixedSize Containers
We create a struct consisting of compile-time fixed size containers that can be used for zero copy inter-process communication.
use iceoryx2_bb_container::byte_string::*;
use iceoryx2_bb_container::vec::*;
const TEXT_CAPACITY: usize = 123;
const DATA_CAPACITY: usize = 456;
#[repr(C)]
struct MyMessageType {
some_text: FixedSizeByteString<TEXT_CAPACITY>,
some_data: FixedSizeVec<u64, DATA_CAPACITY>,
}
let my_message = MyMessageType {
some_text: FixedSizeByteString::from_bytes(b"Hello World")?,
some_data: FixedSizeVec::new(),
};
§2. Shared Memory Compatible Run-Time FixedSize Containers
Despite that the containers are already implemented, iceoryx2 itself does not yet support run-time fixed size types. It is planned and will be part of an upcoming release.
§3. Run-Time FixedSize Containers
We create a struct consisting of run-time fixed size containers. This can be interesting when it shall be used in a safety-critical environment where everything must be pre-allocated to ensure that required memory is always available.
use iceoryx2_bb_container::queue::*;
const QUEUE_CAPACITY: usize = 123;
#[repr(C)]
struct MyType {
some_queue: Queue<u64>,
}
let my_thing = MyType {
some_queue: Queue::new(QUEUE_CAPACITY),
};
Modules§
- byte_
string - A byte string similar to
std::string::String
but it does not support UTF-8 Relocatable (inter-process shared memory compatible) string implementations. - queue
- A queue similar to
std::collections::VecDeque
Three queue variations that are similar tostd::collections::VecDeque
. - semantic_
string - Extends the ByteString so that custom string types with a semantic
ruleset on their content can be realized.
The
SemanticString
is a trait forFixedSizeByteString
to create strong string types with semantic content contracts. They can be created with the help of thesemantic_string
macro. - slotmap
- A container with persistent unique keys to access values. A SlotMap is a container that has a static unique key for every stored value. Adding or removing values to the SlotMap do not change the unique key of the remaining values. Multiple variationes of that container are available.
- vec
- A vector similar to
std::vec::Vec
Contains vector variations that are similar tostd::vec::Vec
.
Macros§
- semantic_
string - Helper macro to create a new
SemanticString
. Usage example can be found here:crate::semantic_string
.