45 #include <type_traits>
65 virtual const char*
what()
const throw() {
return "FutureThreadError\n";}
69 virtual const char*
what()
const throw() {
return "FutureWhenError\n";}
229 namespace FutureHelper {
238 mutable std::unique_ptr<const Cgu::Callback::CallbackArg<const Val&>>
when;
243 when(std::move(when_)) {}
254 mutable std::unique_ptr<Cgu::SafeEmitterArg<const Val&>>
when;
259 when(std::move(when_)) {}
269 std::unique_ptr<Cgu::Thread::Thread> thread_u;
270 std::unique_ptr<Cgu::Callback::Callback> cb_u;
280 template <
class T,
class Ret,
class... Args>
281 void run_wrapper(T*, Ret (T::*)(Args...),
const Args&...);
283 template <
class T,
class Ret,
class... Args>
284 void run_wrapper_const(
const T*, Ret (T::*)(Args...)
const,
const Args&...);
286 template <
class Ret,
class... Args>
287 void run_wrapper_static(Ret (*)(Args...),
const Args&...);
289 template <
class Func>
290 void run_wrapper_functor(Func&);
292 void cancel_cleanup();
296 gint, GMainContext*);
299 gint, GMainContext*);
305 const std::unique_ptr<const Cgu::Callback::Callback>& func,
309 Future(): val(), done(
false), running(
false), error(
false), emitter_error(
false) {}
357 template <
class Ret,
class T>
393 template <
class Ret,
class Param1,
class Arg1,
class T>
395 Ret (T::*func)(Param1),
430 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
432 Ret (T::*func)(Param1, Param2),
468 template <
class Ret,
class Param1,
class Param2,
class Param3,
469 class Arg1,
class Arg2,
class Arg3,
class T>
471 Ret (T::*func)(Param1, Param2, Param3),
507 template <
class Ret,
class T>
509 Ret (T::*func)()
const);
543 template <
class Ret,
class Param1,
class Arg1,
class T>
545 Ret (T::*func)(Param1)
const,
580 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2,
class T>
582 Ret (T::*func)(Param1, Param2)
const,
618 template <
class Ret,
class Param1,
class Param2,
class Param3,
619 class Arg1,
class Arg2,
class Arg3,
class T>
621 Ret (T::*func)(Param1, Param2, Param3)
const,
687 template <
class Ret,
class Param1,
class Arg1>
723 template <
class Ret,
class Param1,
class Param2,
class Arg1,
class Arg2>
760 template <
class Ret,
class Param1,
class Param2,
class Param3,
761 class Arg1,
class Arg2,
class Arg3>
799 template <
class Ret,
class Param1,
class Param2,
class Param3,
class Param4,
800 class Arg1,
class Arg2,
class Arg3,
class Arg4>
844 template <
class Func>
1184 gint priority = G_PRIORITY_DEFAULT,
1185 GMainContext* context = 0);
1330 template <
class When,
1331 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1334 gint priority = G_PRIORITY_DEFAULT,
1335 GMainContext* context = 0) {
1336 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1456 gint priority = G_PRIORITY_DEFAULT,
1457 GMainContext* context = 0);
1584 template <
class When,
1585 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<When>::type,
1589 gint priority = G_PRIORITY_DEFAULT,
1590 GMainContext* context = 0) {
1591 return when(Callback::lambda<const Val&>(std::forward<When>(w)),
1692 GMainContext* context = 0);
1795 template <
class Fail,
1796 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
1799 GMainContext* context = 0) {
1800 fail(Callback::lambda<>(std::forward<Fail>(f)),
1876 GMainContext* context = 0);
1957 template <
class Fail,
1958 class =
typename std::enable_if<!std::is_convertible<typename std::remove_reference<Fail>::type,
1962 GMainContext* context = 0) {
1963 fail(Callback::lambda<>(std::forward<Fail>(f)),
1984 bool is_done() const noexcept;
2143 template <class Obj, class Ret, class... Params, class... Args>
2145 Ret (Obj::*func)(Params...),
2185 template <
class Obj,
class Ret,
class... Params,
class... Args>
2187 Ret (Obj::*func)(Params...)
const,
2227 template <
class Ret,
class... Params,
class... Args>
2288 template <
class Ret,
class Func>
2296 #ifndef DOXYGEN_PARSING
2297 template <
class Func>
2311 #include <c++-gtk-utils/future.tpp>