timemory 3.3.0
Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
tim::utility::transient_function< RetT(Args...)> Struct Template Reference

#include "timemory/utility/transient_function.hpp"

+ Collaboration diagram for tim::utility::transient_function< RetT(Args...)>:

Public Types

using dispatch_type = RetT(*)(void *, Args...)
 
using target_function_reference = RetT(Args...)
 

Public Member Functions

 transient_function ()=default
 
 ~transient_function ()=default
 
 transient_function (transient_function &&) noexcept=default
 
transient_functionoperator= (transient_function &&) noexcept=default
 
template<typename Tp >
 transient_function (Tp &&target)
 
 transient_function (target_function_reference target)
 
transient_functionoperator= (target_function_reference target)
 
RetT operator() (Args &&... args) const
 

Static Public Member Functions

template<typename Up >
static RetT dispatcher (void *target, Args &&... args)
 

Detailed Description

template<typename RetT, typename... Args>
struct tim::utility::transient_function< RetT(Args...)>

Definition at line 48 of file transient_function.hpp.

Member Typedef Documentation

◆ dispatch_type

template<typename RetT , typename... Args>
using tim::utility::transient_function< RetT(Args...)>::dispatch_type = RetT (*)(void*, Args...)

Definition at line 50 of file transient_function.hpp.

◆ target_function_reference

template<typename RetT , typename... Args>
using tim::utility::transient_function< RetT(Args...)>::target_function_reference = RetT(Args...)

Definition at line 51 of file transient_function.hpp.

Constructor & Destructor Documentation

◆ transient_function() [1/4]

template<typename RetT , typename... Args>
tim::utility::transient_function< RetT(Args...)>::transient_function ( )
default

◆ ~transient_function()

template<typename RetT , typename... Args>
tim::utility::transient_function< RetT(Args...)>::~transient_function ( )
default

◆ transient_function() [2/4]

template<typename RetT , typename... Args>
tim::utility::transient_function< RetT(Args...)>::transient_function ( transient_function< RetT(Args...)> &&  )
defaultnoexcept

◆ transient_function() [3/4]

template<typename RetT , typename... Args>
template<typename Tp >
tim::utility::transient_function< RetT(Args...)>::transient_function ( Tp &&  target)
inline

Definition at line 67 of file transient_function.hpp.

68 : m_dispatch(&dispatcher<std::decay_t<Tp>>)
69 , m_target(&target)
70 {}
static RetT dispatcher(void *target, Args &&... args)

◆ transient_function() [4/4]

template<typename RetT , typename... Args>
tim::utility::transient_function< RetT(Args...)>::transient_function ( target_function_reference  target)
inline

Definition at line 73 of file transient_function.hpp.

74 : m_dispatch(dispatcher<target_function_reference>)
75 {
76 static_assert(
77 sizeof(void*) == sizeof(target),
78 "It will not be possible to pass functions by reference on this platform. "
79 "Please use explicit function pointers i.e. foo(target) -> foo(&target)");
80 m_target = static_cast<void*>(target);
81 }

Member Function Documentation

◆ dispatcher()

template<typename RetT , typename... Args>
template<typename Up >
static RetT tim::utility::transient_function< RetT(Args...)>::dispatcher ( void *  target,
Args &&...  args 
)
inlinestatic

Definition at line 56 of file transient_function.hpp.

57 {
58 return (*static_cast<Up*>(target))(std::forward<Args>(args)...);
59 }

◆ operator()()

template<typename RetT , typename... Args>
RetT tim::utility::transient_function< RetT(Args...)>::operator() ( Args &&...  args) const
inline

Definition at line 98 of file transient_function.hpp.

99 {
100 return m_dispatch(m_target, std::forward<Args>(args)...);
101 }

◆ operator=() [1/2]

template<typename RetT , typename... Args>
transient_function & tim::utility::transient_function< RetT(Args...)>::operator= ( target_function_reference  target)
inline

Definition at line 84 of file transient_function.hpp.

85 {
86 if(this == &target)
87 return *this;
88
89 static_assert(
90 sizeof(void*) == sizeof(target),
91 "It will not be possible to pass functions by reference on this platform. "
92 "Please use explicit function pointers i.e. foo(target) -> foo(&target)");
93 m_dispatch = dispatcher<target_function_reference>;
94 m_target = static_cast<void*>(target);
95 return *this;
96 }

◆ operator=() [2/2]

template<typename RetT , typename... Args>
transient_function & tim::utility::transient_function< RetT(Args...)>::operator= ( transient_function< RetT(Args...)> &&  )
defaultnoexcept

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