CIRCT 24.0.0git
Loading...
Searching...
No Matches
esi::TypedFunction< ArgT, ResultT, SkipTypeCheck > Class Template Reference

#include <TypedPorts.h>

Inheritance diagram for esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >:
Collaboration diagram for esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >:

Public Member Functions

 TypedFunction (services::FuncService::Function *func)
 Implicit conversion from Function* (returned by getAs<>()).
 TypedFunction (const TypedFunction &)=delete
TypedFunction & operator= (const TypedFunction &)=delete
void connect ()
std::future< ResultT > call (const ArgT &arg)
template<typename First, typename... Rest, typename = std::enable_if_t< std::is_constructible_v<ArgT, First, Rest...> && (!std::is_same_v<std::decay_t<First>, ArgT> || sizeof...(Rest) != 0)>>
std::future< ResultT > call (First &&first, Rest &&...rest)
 Emplace-style call: constructs ArgT in-place from the forwarded arguments and forwards to call(const ArgT &).
template<typename... Args>
auto operator() (Args &&...args) -> decltype(this->call(std::forward< Args >(args)...))
 Function-call operator overloads: forward to call().
services::FuncService::Function & raw ()
const services::FuncService::Function & raw () const

Private Attributes

services::FuncService::Function * inner
std::optional< TypedWritePort< ArgT, SkipTypeCheck > > argPort
std::optional< TypedReadPort< ResultT, SkipTypeCheck > > resultPort
std::mutex callMutex

Detailed Description

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
class esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >

Definition at line 1031 of file TypedPorts.h.

Constructor & Destructor Documentation

◆ TypedFunction() [1/2]

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::TypedFunction ( services::FuncService::Function * func)
inline

Implicit conversion from Function* (returned by getAs<>()).

Definition at line 1035 of file TypedPorts.h.

References inner.

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

◆ TypedFunction() [2/2]

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::TypedFunction ( const TypedFunction< ArgT, ResultT, SkipTypeCheck > & )
delete

References TypedFunction().

Member Function Documentation

◆ call() [1/2]

◆ call() [2/2]

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
template<typename First, typename... Rest, typename = std::enable_if_t< std::is_constructible_v<ArgT, First, Rest...> && (!std::is_same_v<std::decay_t<First>, ArgT> || sizeof...(Rest) != 0)>>
std::future< ResultT > esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::call ( First && first,
Rest &&... rest )
inline

Emplace-style call: constructs ArgT in-place from the forwarded arguments and forwards to call(const ArgT &).

SFINAE-disabled for the single-ArgT-argument case so it does not shadow the lvalue overload.

Definition at line 1072 of file TypedPorts.h.

References call().

Referenced by esiaccel.types.FunctionPort::__call__().

◆ connect()

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
void esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::connect ( )
inline

◆ operator()()

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
template<typename... Args>
auto esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::operator() ( Args &&... args) ->decltype(this->call(std::forward< Args >(args)...))
inline

Function-call operator overloads: forward to call().

Definition at line 1078 of file TypedPorts.h.

References call().

◆ operator=()

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
TypedFunction & esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::operator= ( const TypedFunction< ArgT, ResultT, SkipTypeCheck > & )
delete

References TypedFunction().

◆ raw() [1/2]

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
services::FuncService::Function & esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::raw ( )
inline

Definition at line 1083 of file TypedPorts.h.

References inner.

◆ raw() [2/2]

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
const services::FuncService::Function & esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::raw ( ) const
inline

Definition at line 1084 of file TypedPorts.h.

References inner.

Member Data Documentation

◆ argPort

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
std::optional<TypedWritePort<ArgT, SkipTypeCheck> > esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::argPort
private

Definition at line 1088 of file TypedPorts.h.

Referenced by call(), and connect().

◆ callMutex

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
std::mutex esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::callMutex
private

Definition at line 1090 of file TypedPorts.h.

Referenced by call().

◆ inner

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
services::FuncService::Function* esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::inner
private

Definition at line 1087 of file TypedPorts.h.

Referenced by connect(), raw(), raw(), and TypedFunction().

◆ resultPort

template<typename ArgT, typename ResultT, bool SkipTypeCheck = false>
std::optional<TypedReadPort<ResultT, SkipTypeCheck> > esi::TypedFunction< ArgT, ResultT, SkipTypeCheck >::resultPort
private

Definition at line 1089 of file TypedPorts.h.

Referenced by call(), and connect().


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