CommRaT 2.0.0
C++20 Real-Time Messaging Framework
Loading...
Searching...
No Matches
commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount > Class Template Reference

Multi-input infrastructure mixin. More...

#include <commrat/module/io/multi_input_infrastructure.hpp>

Classes

struct  MakeHistoricalMailboxTuple
 
struct  MakeHistoricalMailboxTuple< std::tuple< Ts... > >
 

Protected Types

template<typename T >
using HistoricalMailboxFor = HistoricalMailbox< UserRegistry, 100 >
 
using HistoricalMailboxTuple = typename MakeHistoricalMailboxTuple< InputTypesTuple >::type
 

Protected Member Functions

void initialize_multi_input_mailboxes ()
 Initialize multi-input mailboxes.
 
void start_input_mailboxes ()
 Start all input mailboxes.
 
template<std::size_t PrimaryIdx>
void start_secondary_input_threads ()
 Start receive threads for secondary inputs.
 
void join_secondary_input_threads ()
 Join all secondary input threads.
 
template<std::size_t InputIdx>
void secondary_input_receive_loop ()
 Secondary input receive loop.
 

Protected Attributes

std::optional< HistoricalMailboxTupleinput_mailboxes_
 
std::vector< std::thread > secondary_input_threads_
 

Detailed Description

template<typename ModuleType, typename UserRegistry, typename InputTypesTuple, std::size_t InputCount>
class commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >

Multi-input infrastructure mixin.

Provides mailbox creation, startup, and secondary input receive loops for modules that consume multiple input types.

Template Parameters
ModuleTypeThe derived Module class (CRTP)
UserRegistryMessage registry
InputTypesTupleTuple of input payload types
InputCountNumber of inputs

Definition at line 35 of file multi_input_infrastructure.hpp.

Member Typedef Documentation

◆ HistoricalMailboxFor

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
template<typename T >
using commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::HistoricalMailboxFor = HistoricalMailbox<UserRegistry, 100>
protected

Definition at line 39 of file multi_input_infrastructure.hpp.

◆ HistoricalMailboxTuple

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
using commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::HistoricalMailboxTuple = typename MakeHistoricalMailboxTuple<InputTypesTuple>::type
protected

Definition at line 50 of file multi_input_infrastructure.hpp.

Member Function Documentation

◆ initialize_multi_input_mailboxes()

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
void commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::initialize_multi_input_mailboxes ( )
inlineprotected

Initialize multi-input mailboxes.

Creates one HistoricalMailbox per input type at the correct address.

Definition at line 60 of file multi_input_infrastructure.hpp.

◆ join_secondary_input_threads()

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
void commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::join_secondary_input_threads ( )
inlineprotected

◆ secondary_input_receive_loop()

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
template<std::size_t InputIdx>
void commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::secondary_input_receive_loop ( )
inlineprotected

Secondary input receive loop.

Continuously receives from secondary input mailboxes to populate their historical buffers. Called in background threads.

Definition at line 195 of file multi_input_infrastructure.hpp.

References commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::input_mailboxes_.

◆ start_input_mailboxes()

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
void commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::start_input_mailboxes ( )
inlineprotected

Start all input mailboxes.

Calls start() on each HistoricalMailbox and checks for errors.

Definition at line 69 of file multi_input_infrastructure.hpp.

◆ start_secondary_input_threads()

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
template<std::size_t PrimaryIdx>
void commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::start_secondary_input_threads ( )
inlineprotected

Start receive threads for secondary inputs.

Spawns background threads to continuously receive from all inputs except the primary (which is handled by multi_input_loop).

Template Parameters
PrimaryIdxIndex of primary input

Definition at line 82 of file multi_input_infrastructure.hpp.

Member Data Documentation

◆ input_mailboxes_

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
std::optional<HistoricalMailboxTuple> commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::input_mailboxes_
protected

◆ secondary_input_threads_

template<typename ModuleType , typename UserRegistry , typename InputTypesTuple , std::size_t InputCount>
std::vector<std::thread> commrat::MultiInputInfrastructure< ModuleType, UserRegistry, InputTypesTuple, InputCount >::secondary_input_threads_
protected

The documentation for this class was generated from the following file: