45 #include <type_traits>
65 virtual const char*
what()
const throw() {
return "FutureThreadError\n";}
69 virtual const char*
what()
const throw() {
return "FutureWhenError\n";}
239 namespace FutureHelper {
248 mutable std::unique_ptr<const Cgu::Callback::CallbackArg<const Val&>>
when;
253 when(
std::move(when_)) {}
264 mutable std::unique_ptr<Cgu::SafeEmitterArg<const Val&>>
when;
269 when(
std::move(when_)) {}
279 std::unique_ptr<Cgu::Thread::Thread> thread_u;
280 std::unique_ptr<Cgu::Callback::Callback> cb_u;
290 template <
class T,
class Ret,
class... Args>
291 void run_wrapper(T*, Ret (T::*)(Args...),
const Args&...);
293 template <
class T,
class Ret,
class... Args>
294 void run_wrapper_const(
const T*, Ret (T::*)(Args...)
const,
const Args&...);
296 template <
class Ret,
class... Args>
297 void run_wrapper_static(Ret (*)(Args...),
const Args&...);
299 template <
class Func>
300 void run_wrapper_functor(Func&);
302 void cancel_cleanup();
306 gint, GMainContext*);
309 gint, GMainContext*);
315 const std::unique_ptr<const Cgu::Callback::Callback>& func,
319 Future(): val(), done(
false), running(
false), error(
false), emitter_error(
false) {}
367 template <
class Ret,
class T>
403 template <
class Ret,
class Param1,
class Arg1,
class T>
405 Ret (T::*func)(Param1),
440 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
442 Ret (T::*func)(Param1, Param2),
478 template <
class Ret,
class Param1,
class Param2,
class Param3,
479 class Arg1,
class Arg2,
class Arg3,
class T>
481 Ret (T::*func)(Param1, Param2, Param3),
517 template <
class Ret,
class T>
519 Ret (T::*func)()
const);
553 template <
class Ret,
class Param1,
class Arg1,
class T>
555 Ret (T::*func)(Param1)
const,
590 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
592 Ret (T::*func)(Param1, Param2)
const,
628 template <
class Ret,
class Param1,
class Param2,
class Param3,
629 class Arg1,
class Arg2,
class Arg3,
class T>
631 Ret (T::*func)(Param1, Param2, Param3)
const,
697 template <
class Ret,
class Param1,
class Arg1>
733 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2>
770 template <
class Ret,
class Param1,
class Param2,
class Param3,
771 class Arg1,
class Arg2,
class Arg3>
809 template <
class Ret,
class Param1,
class Param2,
class Param3,
class Param4,
810 class Arg1,
class Arg2,
class Arg3,
class Arg4>
854 template <
class Func>
1231 gint priority = G_PRIORITY_DEFAULT,
1232 GMainContext* context = 0);
1380 template <
class When,
1381 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1384 gint priority = G_PRIORITY_DEFAULT,
1385 GMainContext* context = 0) {
1386 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1506 gint priority = G_PRIORITY_DEFAULT,
1507 GMainContext* context = 0);
1634 template <
class When,
1635 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1639 gint priority = G_PRIORITY_DEFAULT,
1640 GMainContext* context = 0) {
1641 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1744 GMainContext* context = 0);
1849 template <
class Fail,
1850 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
1853 GMainContext* context = 0) {
1854 fail(Callback::lambda<>(std::forward<Fail>(f)),
1932 GMainContext* context = 0);
2015 template <
class Fail,
2016 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
2020 GMainContext* context = 0) {
2021 fail(Callback::lambda<>(std::forward<Fail>(f)),
2042 bool is_done() const noexcept;
2206 template <class Obj, class Ret, class... Params, class... Args>
2208 Ret (Obj::*func)(Params...),
2248 template <
class Obj,
class Ret,
class... Params,
class... Args>
2250 Ret (Obj::*func)(Params...)
const,
2290 template <
class Ret,
class... Params,
class... Args>
2351 template <
class Ret,
class Func>
2359 #ifndef DOXYGEN_PARSING
2360 template <
class Func>
2374 #include <c++-gtk-utils/future.tpp>
Cgu::Callback::SafeFunctor when(When &&w, gint priority=G_PRIORITY_DEFAULT, GMainContext *context=0)
Definition: future.h:1383
SafeEmitter done_emitter
Definition: future.h:2163
std::unique_ptr< Cgu::SafeEmitterArg< const Val & > > when
Definition: future.h:264
bool is_emitter_error() const noexcept
WhenWrapperArg(WhenWrapperArg &&w)
Definition: future.h:254
bool is_done() const noexcept
Cgu::IntrusivePtr< Cgu::Thread::Future< Ret > > make_future(Obj &obj, Ret(Obj::*func)(Params...), Args &&...args)
Definition: future.h:2207
std::unique_ptr< const Cgu::Callback::CallbackArg< const Val & > > when
Definition: future.h:248
Cgu::Callback::SafeFunctor when(When &&w, Cgu::Releaser &r, gint priority=G_PRIORITY_DEFAULT, GMainContext *context=0)
Definition: future.h:1637
A wrapper class for pthread condition variables.
Definition: mutex.h:449
This file provides classes for type erasure.
WhenWrapperArgRel(std::unique_ptr< Cgu::SafeEmitterArg< const Val & >> &&when_)
Definition: future.h:268
This is a smart pointer for managing objects allocated on freestore which maintain their own referenc...
Definition: intrusive_ptr.h:98
void fail(Fail &&f, Cgu::Releaser &r, GMainContext *context=0)
Definition: future.h:2018
void fail(const Cgu::Callback::Callback *cb, GMainContext *context=0)
Future & operator=(const Future &)=delete
WhenWrapperArg(std::unique_ptr< const Cgu::Callback::CallbackArg< const Val & >> &&when_)
Definition: future.h:252
bool is_emitter_done() const noexcept
A thread-safe class to execute callbacks connected to it, with provision for automatic disconnection...
Definition: emitter.h:327
A wrapper class for pthread mutexes.
Definition: mutex.h:117
void fail(Fail &&f, GMainContext *context=0)
Definition: future.h:1852
This is a counter class providing the ref() and unref() functions required by IntrusivePtr, with a thread safe reference count..
Definition: intrusive_ptr.h:349
A class representing a pthread thread.
Definition: thread.h:166
This file provides a thread-safe signal/slot mechanism, with automatic disconnection.
Provides wrapper classes for pthread mutexes and condition variables, and scoped locking classes for ...
Definition: application.h:44
Functor class holding a Callback::CallbackArg object, with thread-safe reference count.
Definition: callback.h:784
WhenWrapperArgRel(WhenWrapperArgRel &&w)
Definition: future.h:270
virtual const char * what() const
Definition: future.h:65
static Cgu::IntrusivePtr< Cgu::Thread::Future< Val > > make(T &t, Ret(T::*func)())
A class representing a pthread thread which will provide a value.
Definition: future.h:277
bool is_error() const noexcept
Cgu::Callback::SafeFunctor when(const Cgu::Callback::CallbackArg< const Val & > *cb, gint priority=G_PRIORITY_DEFAULT, GMainContext *context=0)
#define CGU_GLIB_MEMORY_SLICES_FUNCS
Definition: cgu_config.h:84
virtual const char * what() const
Definition: future.h:69
A class used for tracking EmitterArg and SafeEmitterArg connections.
Definition: emitter.h:352