dxd - dynax driver framework 3.0.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::stream::group< _device_t, source_t > Class Template Reference

streaming group: the streams of one device sharing a desc::stream::group id, streamed together by one realtime thread More...

#include <dx_stream_group.h>

Inheritance diagram for dx::stream::group< _device_t, source_t >:
Collaboration diagram for dx::stream::group< _device_t, source_t >:

Public Types

typedef settings< device_t >::client client
typedef dx::clock< source_t > clock
 the one clock of this group, its source freely selectable
typedef dx::source<>::clock_t clock_t
typedef _device_t device_t
typedef dx::source<>::event_t event_t
typedef std::conditional_t< store, typename dx::promoted< uint32_t >::template preference< decltype(device_t::preference)>, dx::promoted< uint32_t > > promoted
typedef std::conditional_t< store, typename dx::promoted< uint32_t >::template preference< decltype(device_t::preference)>, dx::promoted< uint32_t > > promoted
typedef device_t::stream_t stream_t
typedef settings< device_t >::transport transport
 the group's two sides, reached as transport::/client:: members

Public Member Functions

 __dx_catchall (std::cerr<< dx::exception(&exception, exception.error, __PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;,) void conclude() noexcept
 dx_catchall_rethrow () virtual ~source()=default
template<typename... args_t>
 group (device_t &device, args_t &&... args)
virtual void halt () noexcept
 stop and remove clock thread
void info (std::ostream &os) noexcept override try
realtimeinitialize (const std::chrono::high_resolution_clock::duration &resolution)
void initialize (const typename clock_t::duration &duration)
 operator event_t & () noexcept
 operator event_t * () noexcept
virtual void run ()
 create and start clock thread
virtual void sync (const typename clock_t::time_point &now)
virtual sourcewait (bool reset=false) try

Static Public Member Functions

static std::string key (direction::direction direction, uint32_t)
static std::string key (direction::direction direction, uint32_t strategy)

Public Attributes

promoted safety_offset [direction::directions]
promoted safety_offset [direction::directions]
promoted< uint32_tstart
promoted< bool > started
std::map< decltype(stream_t::target.idx()), std::weak_ptr< stream_t > > streams
 shared stream ownership: central weak reference per stream, guarded by device
promoted sync_strategy
promoted sync_strategy

Protected Member Functions

virtual void notify () noexcept
 notify change from device requiring streaming reset
void tick () override
 the plain container has no transport of its own: a bus whose group moves the data overrides this, a group fed from outside (service, kernel, SDK callback) has nothing to do here

Protected Attributes

std::condition_variable condition_variable
device_tdevice
 also the mutex serializing membership against the tick
_event_t event
std::function< void()> flush_hook
std::function< void()> halt_hook
std::mutex mutex
_clock_t::time_point objective
std::function< void()> run_hook
std::atomic< bool > running
os_result status

Detailed Description

template<typename _device_t, typename source_t = dx::source<>>
class dx::stream::group< _device_t, source_t >

streaming group: the streams of one device sharing a desc::stream::group id, streamed together by one realtime thread

Member Typedef Documentation

◆ client

template<typename _device_t, typename source_t = dx::source<>>
typedef settings<device_t>::client dx::stream::group< _device_t, source_t >::client

◆ clock

template<typename _device_t, typename source_t = dx::source<>>
typedef dx::clock<source_t> dx::stream::group< _device_t, source_t >::clock

the one clock of this group, its source freely selectable

◆ clock_t

typedef dx::source<>::clock_t dx::clock< dx::source<> >::clock_t
inherited

◆ device_t

template<typename _device_t, typename source_t = dx::source<>>
typedef _device_t dx::stream::group< _device_t, source_t >::device_t

◆ event_t

typedef dx::source<>::event_t dx::clock< dx::source<> >::event_t
inherited

◆ promoted [1/2]

template<typename device_t, bool store = true>
typedef std::conditional_t<store, typename dx::promoted<uint32_t>::template preference<decltype(device_t::preference)>, dx::promoted<uint32_t> > dx::stream::settings< device_t, store >::promoted
inherited

◆ promoted [2/2]

typedef std::conditional_t<store, typename dx::promoted<uint32_t>::template preference<decltype(device_t::preference)>, dx::promoted<uint32_t> > dx::stream::settings< device_t, store >::promoted
inherited

◆ stream_t

template<typename _device_t, typename source_t = dx::source<>>
typedef device_t::stream_t dx::stream::group< _device_t, source_t >::stream_t

◆ transport

template<typename _device_t, typename source_t = dx::source<>>
typedef settings<device_t>::transport dx::stream::group< _device_t, source_t >::transport

the group's two sides, reached as transport::/client:: members

Constructor & Destructor Documentation

◆ group()

template<typename _device_t, typename source_t = dx::source<>>
template<typename... args_t>
dx::stream::group< _device_t, source_t >::group ( device_t & device,
args_t &&... args )
inline

Member Function Documentation

◆ __dx_catchall()

dx::stream::control< dx::clock< dx::source<> > >::__dx_catchall ( std::cerr<< dx::exception &,.,,, __LINE__<< std::endl; )
inlinenoexceptinherited

◆ dx_catchall_rethrow()

dx::source< _event_t, _clock_t >::dx_catchall_rethrow ( )
defaultinherited

◆ halt()

virtual void dx::clock< dx::source<> >::halt ( )
inlinevirtualnoexceptinherited

stop and remove clock thread

<halting from its own tick: the loop ends once the tick returns, nobody can join here

<elect the single caller allowed to join() - concurrent halt() callers (e.g. async surprise vs. the main test thread) would otherwise both reach join() on the same thread, undefined behavior

◆ info()

void dx::stream::control< dx::clock< dx::source<> > >::info ( std::ostream & os)
inlineoverridevirtualnoexceptinherited

Reimplemented from dx::clock< dx::source<> >.

◆ initialize() [1/2]

realtime & dx::thread::prio::realtime::initialize ( const std::chrono::high_resolution_clock< dx::source<> >::duration & resolution)
inlineinherited
Todo
dx::thread::prio: replace experimental hardcoded preemption limit with real limit obtained from machine

◆ initialize() [2/2]

void dx::clock< dx::source<> >::initialize ( const typename clock_t::duration & duration)
inlineinherited

◆ key() [1/2]

template<typename device_t, bool store = true>
std::string dx::stream::settings< device_t, store >::client::key ( direction::direction direction,
uint32_t  )
inlinestaticinherited
Here is the caller graph for this function:

◆ key() [2/2]

template<typename device_t, bool store = true>
std::string dx::stream::settings< device_t, store >::transport::key ( direction::direction direction,
uint32_t strategy )
inlinestaticinherited
Here is the caller graph for this function:

◆ notify()

virtual void dx::clock< dx::source<> >::notify ( )
inlineprotectedvirtualnoexceptinherited

notify change from device requiring streaming reset

◆ operator event_t &()

dx::clock< dx::source<> >::operator event_t & ( )
inlinenoexceptinherited

◆ operator event_t *()

dx::clock< dx::source<> >::operator event_t * ( )
inlinenoexceptinherited

◆ run()

virtual void dx::clock< dx::source<> >::run ( )
inlinevirtualinherited

create and start clock thread

◆ sync()

virtual void dx::source< _event_t, _clock_t >::sync ( const typename clock_t::time_point & now)
inlinevirtualinherited

◆ tick()

template<typename _device_t, typename source_t = dx::source<>>
void dx::stream::group< _device_t, source_t >::tick ( )
inlineoverrideprotectedvirtual

the plain container has no transport of its own: a bus whose group moves the data overrides this, a group fed from outside (service, kernel, SDK callback) has nothing to do here

Implements dx::clock< dx::source<> >.

◆ wait()

virtual source & dx::source< _event_t, _clock_t >::wait ( bool reset = false)
inlinevirtualinherited

Member Data Documentation

◆ condition_variable

std::condition_variable dx::source< _event_t, _clock_t >::condition_variable
protectedinherited

◆ device

template<typename _device_t, typename source_t = dx::source<>>
device_t& dx::stream::group< _device_t, source_t >::device
protected

also the mutex serializing membership against the tick

◆ event

_event_t dx::source< _event_t, _clock_t >::event
protectedinherited
Todo
evaluate clock::status replacement (exception?)

◆ flush_hook

std::function<void()> dx::stream::control< dx::clock< dx::source<> > >::flush_hook
protectedinherited

◆ halt_hook

std::function<void()> dx::stream::control< dx::clock< dx::source<> > >::halt_hook
protectedinherited

◆ mutex

std::mutex dx::source< _event_t, _clock_t >::mutex
protectedinherited

◆ objective

_clock_t::time_point dx::source< _event_t, _clock_t >::objective
protectedinherited

◆ run_hook

std::function<void()> dx::stream::control< dx::clock< dx::source<> > >::run_hook
protectedinherited

◆ running

std::atomic<bool> dx::source< _event_t, _clock_t >::running
protectedinherited

◆ safety_offset [1/2]

template<typename device_t, bool store = true>
promoted dx::stream::settings< device_t, store >::safety_offset[direction::directions]
inherited

◆ safety_offset [2/2]

◆ start

◆ started

promoted<bool> dx::stream::control< dx::clock< dx::source<> > >::started
inherited

◆ status

os_result dx::source< _event_t, _clock_t >::status
protectedinherited

◆ streams

template<typename _device_t, typename source_t = dx::source<>>
std::map<decltype(stream_t::target.idx()), std::weak_ptr<stream_t> > dx::stream::group< _device_t, source_t >::streams

shared stream ownership: central weak reference per stream, guarded by device

◆ sync_strategy [1/2]

template<typename device_t, bool store = true>
promoted dx::stream::settings< device_t, store >::sync_strategy
inherited

◆ sync_strategy [2/2]


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

(c) copyright 2009 dynamic acoustics e.U. generated on

a closed source license may be obtained by requesting a written permission from dynamic acoustics e.U.
however - governmental use generally and military use especially is strictly prohibited though.