c++-gtk-utils
Public Member Functions | Friends
Cgu::Callback::SafeFunctorArg< FreeArgs > Class Template Reference

Functor class holding a Callback::CallbackArg object, with thread-safe reference count. More...

#include <c++-gtk-utils/callback.h>

List of all members.

Public Member Functions

void operator() (typename Cgu::Param< FreeArgs >::ParamType...args) const
SafeFunctorArgoperator= (const SafeFunctorArg &f)
SafeFunctorArgoperator= (SafeFunctorArg &&f)
 SafeFunctorArg (const CallbackArg< FreeArgs...> *cb)
 SafeFunctorArg (const SafeFunctorArg &f)
 SafeFunctorArg (SafeFunctorArg &&f)
 SafeFunctorArg ()

Friends

struct std::hash< SafeFunctorArg >
bool operator== (const SafeFunctorArg &, const SafeFunctorArg &)
bool operator< (const SafeFunctorArg &, const SafeFunctorArg &)

Detailed Description

template<class... FreeArgs>
class Cgu::Callback::SafeFunctorArg< FreeArgs >

Functor class holding a Callback::CallbackArg object, with thread-safe reference count.

See also:
FunctorArg
Callback namespace

This class is the same as Callback::FunctorArg except that it will provide synchronisation of the reference count between threads. Use it where a functor wrapper object is to be passed between threads. The FunctorArg documentation gives details on usage.

Callback::SafeFunctorArg<> is typedef'ed to Callback::SafeFunctor.

For further background, read this: Callback


Constructor & Destructor Documentation

template<class... FreeArgs>
Cgu::Callback::SafeFunctorArg< FreeArgs >::SafeFunctorArg ( const CallbackArg< FreeArgs...> *  cb) [inline]

Constructor of first SafeFunctorArg holding the referenced callback. As it is not marked explicit, it is also a type conversion constructor.

Parameters:
cbThe CallbackArg object which the functor is to manage.
Exceptions:
std::bad_allocThis might throw std::bad_alloc if memory is exhausted and the system throws in that case. Note that if such an exception is thrown, then this constructor will clean itself up and also delete the callback object passed to it.
Note:
std::bad_alloc will not be thrown if the library has been installed using the --with-glib-memory-slices-no-compat configuration option: instead glib will terminate the program if it is unable to obtain memory from the operating system.
template<class... FreeArgs>
Cgu::Callback::SafeFunctorArg< FreeArgs >::SafeFunctorArg ( const SafeFunctorArg< FreeArgs > &  f) [inline]

The copy constructor does not throw.

Parameters:
fThe assignor.
template<class... FreeArgs>
Cgu::Callback::SafeFunctorArg< FreeArgs >::SafeFunctorArg ( SafeFunctorArg< FreeArgs > &&  f) [inline]

The move constructor does not throw.

Parameters:
fThe functor to be moved.
template<class... FreeArgs>
Cgu::Callback::SafeFunctorArg< FreeArgs >::SafeFunctorArg ( ) [inline]

Default constructor, where a Callback::CallbackArg object is to be assigned later (via the type conversion constructor and/or the assignment operator). This constructor does not throw.

Note:
The reference count maintained with respect to the contained callback object is thread-safe, so SafeFunctorArg objects may be copied between threads by the implicit assignment operator and put in different containers in different threads. They use a SharedLockPtr object to hold the referenced callback object.

Member Function Documentation

template<class... FreeArgs>
void Cgu::Callback::SafeFunctorArg< FreeArgs >::operator() ( typename Cgu::Param< FreeArgs >::ParamType...  args) const [inline]

This will execute the referenced function or class method encapsulated by this class. It will only throw if the executed function or class method throws, or if the copy constructor of the free or a bound argument throws and it is not a reference argument. It is thread safe if the referenced function or class method is thread safe.

Parameters:
argsThe unbound arguments to be passed to the referenced function or class method, if any.
template<class... FreeArgs>
SafeFunctorArg& Cgu::Callback::SafeFunctorArg< FreeArgs >::operator= ( SafeFunctorArg< FreeArgs > &&  f) [inline]

This function does not throw.

Parameters:
fThe functor to be moved.
Returns:
The functor object after the move operation.
template<class... FreeArgs>
SafeFunctorArg& Cgu::Callback::SafeFunctorArg< FreeArgs >::operator= ( const SafeFunctorArg< FreeArgs > &  f) [inline]

This function does not throw.

Parameters:
fThe assignor.
Returns:
The functor object after assignment.

Friends And Related Function Documentation

template<class... FreeArgs>
bool operator< ( const SafeFunctorArg< FreeArgs > &  ,
const SafeFunctorArg< FreeArgs > &   
) [friend]

One SafeFunctorArg object is less than another if the address of the CallbackArg object contained by the first is regarded by std::less as less than the address of the CallbackArg object contained by the other. This comparison operator does not throw.

template<class... FreeArgs>
bool operator== ( const SafeFunctorArg< FreeArgs > &  ,
const SafeFunctorArg< FreeArgs > &   
) [friend]

Two SafeFunctorArg objects compare equal if the addresses of the CallbackArg objects they contain are the same. This comparison operator does not throw.

template<class... FreeArgs>
friend struct std::hash< SafeFunctorArg > [friend]

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