CIRCT 24.0.0git
Loading...
Searching...
No Matches
esi::TypedReadPort< T, SkipTypeCheck > Class Template Reference

Strongly typed wrapper around a raw read channel. More...

#include <TypedPorts.h>

Inheritance diagram for esi::TypedReadPort< T, SkipTypeCheck >:
Collaboration diagram for esi::TypedReadPort< T, SkipTypeCheck >:

Public Member Functions

 TypedReadPort (ReadChannelPort &port)
 TypedReadPort (ReadChannelPort *port)
 TypedReadPort (const TypedReadPort &)=delete
TypedReadPort & operator= (const TypedReadPort &)=delete
 TypedReadPort (TypedReadPort &&)=delete
TypedReadPort & operator= (TypedReadPort &&)=delete
 ~TypedReadPort ()
void connect (const ChannelPort::ConnectOptions &opts={std::nullopt, false})
 Connect in polling mode.
void connect (std::function< bool(const T &)> callback, const ChannelPort::ConnectOptions &opts={std::nullopt, false})
 Connect a non-owning typed callback.
void connect (detail::TypedReadOwnedCallback< T > callback, const ChannelPort::ConnectOptions &opts={std::nullopt, false})
 Connect an owning typed callback.
std::unique_ptr< T > read ()
 Blocking typed read in polling mode.
std::future< std::unique_ptr< T > > readAsync ()
 Asynchronous typed read in polling mode.
void setMaxDataQueueMsgs (uint64_t maxMsgs)
 Set the maximum number of decoded typed values buffered in polling mode.
void disconnect ()
 Disconnect the typed port and abandon any pending polling reads.
bool isConnected () const
ReadChannelPort & raw ()
const ReadChannelPort & raw () const

Private Types

enum  Mode { Disconnected , Callback , Polling }
using Deserializer = detail::DeserializerFor<T>
using PollingState = detail::PollingBuffer<std::unique_ptr<T>>

Private Member Functions

void resetConnectState ()
void emplaceDeserializer (detail::DeserializerOutputCallback< T > callback)
void prepareConnect ()

Private Attributes

ReadChannelPort * inner
WireInfo wireInfo_
Mode mode = Mode::Disconnected
uint64_t maxDataQueueMsgs = ReadChannelPort::DefaultMaxDataQueueMsgs
std::optional< Deserializer > deserializer
std::optional< PollingState > pollingState

Detailed Description

template<typename T, bool SkipTypeCheck = false>
class esi::TypedReadPort< T, SkipTypeCheck >

Strongly typed wrapper around a raw read channel.

For scalar/POD-like T, this performs a 1:1 conversion from raw messages. If T defines a nested TypeDeserializer, one instance is created per connection and drives both callback and polling reads through that deserializer.

Polling reads return std::unique_ptr<T> so complex decoded values can be delivered without an extra copy.

Definition at line 733 of file TypedPorts.h.

Member Typedef Documentation

◆ Deserializer

template<typename T, bool SkipTypeCheck = false>
using esi::TypedReadPort< T, SkipTypeCheck >::Deserializer = detail::DeserializerFor<T>
private

Definition at line 865 of file TypedPorts.h.

◆ PollingState

template<typename T, bool SkipTypeCheck = false>
using esi::TypedReadPort< T, SkipTypeCheck >::PollingState = detail::PollingBuffer<std::unique_ptr<T>>
private

Definition at line 867 of file TypedPorts.h.

Member Enumeration Documentation

◆ Mode

template<typename T, bool SkipTypeCheck = false>
enum esi::TypedReadPort::Mode
private
Enumerator
Disconnected 
Callback 
Polling 

Definition at line 866 of file TypedPorts.h.

Constructor & Destructor Documentation

◆ TypedReadPort() [1/4]

template<typename T, bool SkipTypeCheck = false>
esi::TypedReadPort< T, SkipTypeCheck >::TypedReadPort ( ReadChannelPort & port)
inlineexplicit

Definition at line 735 of file TypedPorts.h.

References inner.

Referenced by operator=(), operator=(), TypedReadPort(), and TypedReadPort().

◆ TypedReadPort() [2/4]

template<typename T, bool SkipTypeCheck = false>
esi::TypedReadPort< T, SkipTypeCheck >::TypedReadPort ( ReadChannelPort * port)
inline

Definition at line 737 of file TypedPorts.h.

References inner.

◆ TypedReadPort() [3/4]

template<typename T, bool SkipTypeCheck = false>
esi::TypedReadPort< T, SkipTypeCheck >::TypedReadPort ( const TypedReadPort< T, SkipTypeCheck > & )
delete

References TypedReadPort().

◆ TypedReadPort() [4/4]

template<typename T, bool SkipTypeCheck = false>
esi::TypedReadPort< T, SkipTypeCheck >::TypedReadPort ( TypedReadPort< T, SkipTypeCheck > && )
delete

References TypedReadPort().

◆ ~TypedReadPort()

template<typename T, bool SkipTypeCheck = false>
esi::TypedReadPort< T, SkipTypeCheck >::~TypedReadPort ( )
inline

Definition at line 743 of file TypedPorts.h.

References disconnect(), Disconnected, inner, and mode.

Member Function Documentation

◆ connect() [1/3]

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::connect ( const ChannelPort::ConnectOptions & opts = {std::nullopt, false})
inline

Connect in polling mode.

The port installs an internal typed output queue. read() and readAsync() consume from that queue.

Definition at line 752 of file TypedPorts.h.

Referenced by runCustomServiceDeclChannel(), and runLoopbackI8().

◆ connect() [2/3]

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::connect ( detail::TypedReadOwnedCallback< T > callback,
const ChannelPort::ConnectOptions & opts = {std::nullopt, false} )
inline

Connect an owning typed callback.

This is the typed analogue of ReadChannelPort::ReadCallback: the callback may take ownership of the decoded value or return false to retry delivery later with the same object.

Definition at line 792 of file TypedPorts.h.

◆ connect() [3/3]

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::connect ( std::function< bool(const T &)> callback,
const ChannelPort::ConnectOptions & opts = {std::nullopt, false} )
inline

Connect a non-owning typed callback.

The callback sees the decoded value by reference. Returning false requests that the same decoded value be retried later.

Definition at line 779 of file TypedPorts.h.

◆ disconnect()

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::disconnect ( )
inline

Disconnect the typed port and abandon any pending polling reads.

Definition at line 854 of file TypedPorts.h.

References Disconnected, inner, mode, and resetConnectState().

Referenced by ~TypedReadPort(), and esi::TypedReadPort< void >::~TypedReadPort().

◆ emplaceDeserializer()

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::emplaceDeserializer ( detail::DeserializerOutputCallback< T > callback)
inlineprivate

Definition at line 874 of file TypedPorts.h.

References deserializer, esi::detail::has_type_deserializer_v, and wireInfo_.

◆ isConnected()

template<typename T, bool SkipTypeCheck = false>
bool esi::TypedReadPort< T, SkipTypeCheck >::isConnected ( ) const
inline

Definition at line 859 of file TypedPorts.h.

References inner.

◆ operator=() [1/2]

template<typename T, bool SkipTypeCheck = false>
TypedReadPort & esi::TypedReadPort< T, SkipTypeCheck >::operator= ( const TypedReadPort< T, SkipTypeCheck > & )
delete

References TypedReadPort().

◆ operator=() [2/2]

template<typename T, bool SkipTypeCheck = false>
TypedReadPort & esi::TypedReadPort< T, SkipTypeCheck >::operator= ( TypedReadPort< T, SkipTypeCheck > && )
delete

References TypedReadPort().

◆ prepareConnect()

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::prepareConnect ( )
inlineprivate

◆ raw() [1/2]

template<typename T, bool SkipTypeCheck = false>
ReadChannelPort & esi::TypedReadPort< T, SkipTypeCheck >::raw ( )
inline

Definition at line 861 of file TypedPorts.h.

References inner.

◆ raw() [2/2]

template<typename T, bool SkipTypeCheck = false>
const ReadChannelPort & esi::TypedReadPort< T, SkipTypeCheck >::raw ( ) const
inline

Definition at line 862 of file TypedPorts.h.

References inner.

◆ read()

template<typename T, bool SkipTypeCheck = false>
std::unique_ptr< T > esi::TypedReadPort< T, SkipTypeCheck >::read ( )
inline

Blocking typed read in polling mode.

Definition at line 816 of file TypedPorts.h.

References readAsync().

Referenced by runCustomServiceDeclChannel(), and runLoopbackI8().

◆ readAsync()

template<typename T, bool SkipTypeCheck = false>
std::future< std::unique_ptr< T > > esi::TypedReadPort< T, SkipTypeCheck >::readAsync ( )
inline

Asynchronous typed read in polling mode.

The returned future yields ownership of the next decoded value.

Definition at line 825 of file TypedPorts.h.

References Callback, deserializer, Disconnected, mode, and pollingState.

Referenced by read().

◆ resetConnectState()

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::resetConnectState ( )
inlineprivate

Definition at line 869 of file TypedPorts.h.

References deserializer, and pollingState.

Referenced by disconnect().

◆ setMaxDataQueueMsgs()

template<typename T, bool SkipTypeCheck = false>
void esi::TypedReadPort< T, SkipTypeCheck >::setMaxDataQueueMsgs ( uint64_t maxMsgs)
inline

Set the maximum number of decoded typed values buffered in polling mode.

0 means unbounded.

Definition at line 847 of file TypedPorts.h.

References maxDataQueueMsgs, and pollingState.

Member Data Documentation

◆ deserializer

template<typename T, bool SkipTypeCheck = false>
std::optional<Deserializer> esi::TypedReadPort< T, SkipTypeCheck >::deserializer
private

Definition at line 902 of file TypedPorts.h.

Referenced by emplaceDeserializer(), readAsync(), and resetConnectState().

◆ inner

template<typename T, bool SkipTypeCheck = false>
ReadChannelPort* esi::TypedReadPort< T, SkipTypeCheck >::inner
private

◆ maxDataQueueMsgs

template<typename T, bool SkipTypeCheck = false>
uint64_t esi::TypedReadPort< T, SkipTypeCheck >::maxDataQueueMsgs = ReadChannelPort::DefaultMaxDataQueueMsgs
private

Definition at line 901 of file TypedPorts.h.

Referenced by setMaxDataQueueMsgs().

◆ mode

template<typename T, bool SkipTypeCheck = false>
Mode esi::TypedReadPort< T, SkipTypeCheck >::mode = Mode::Disconnected
private

Definition at line 900 of file TypedPorts.h.

Referenced by disconnect(), prepareConnect(), readAsync(), and ~TypedReadPort().

◆ pollingState

template<typename T, bool SkipTypeCheck = false>
std::optional<PollingState> esi::TypedReadPort< T, SkipTypeCheck >::pollingState
private

Definition at line 903 of file TypedPorts.h.

Referenced by readAsync(), resetConnectState(), and setMaxDataQueueMsgs().

◆ wireInfo_

template<typename T, bool SkipTypeCheck = false>
WireInfo esi::TypedReadPort< T, SkipTypeCheck >::wireInfo_
private

Definition at line 899 of file TypedPorts.h.

Referenced by emplaceDeserializer(), and prepareConnect().


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