39 #ifndef CGU_TASK_MANAGER_H
40 #define CGU_TASK_MANAGER_H
46 #include <type_traits>
62 virtual const char*
what()
const throw() {
return "TaskError\n";}
373 namespace TaskManagerHelper {
375 template <
class Ret,
class FType>
401 template <
class Ret,
class FType>
403 mutable FType functor;
409 template <
class FunctorArg>
422 typedef std::pair<std::unique_ptr<const Callback::Callback>,
423 std::unique_ptr<const Callback::Callback>> QueueItemType;
432 void set_max_threads_impl(
unsigned int max);
735 #ifdef CGU_USE_AUTO_PTR
736 add_task(std::auto_ptr<const Callback::Callback>(task),
737 std::auto_ptr<const Callback::Callback>());
739 add_task(std::unique_ptr<const Callback::Callback>(task),
740 std::unique_ptr<const Callback::Callback>());
810 #ifdef CGU_USE_AUTO_PTR
811 void add_task(std::auto_ptr<const Callback::Callback> task,
812 std::auto_ptr<const Callback::Callback> fail);
814 void add_task(std::unique_ptr<const Callback::Callback> task,
815 std::unique_ptr<const Callback::Callback> fail);
881 template <
class Ret,
class... Params,
class... Args,
class T>
883 Ret (T::*func)(Params...),
1002 template <
class Ret,
class... Params,
class... Args,
class T>
1003 #ifdef CGU_USE_AUTO_PTR
1006 std::auto_ptr<const Cgu::Callback::Callback> fail,
1009 GMainContext* context,
1011 Ret (T::*func)(Params...),
1016 std::unique_ptr<const Cgu::Callback::Callback> fail,
1019 GMainContext* context,
1021 Ret (T::*func)(Params...),
1091 template <
class Ret,
class... Params,
class... Args,
class T>
1092 #ifdef CGU_USE_AUTO_PTR
1094 GMainContext* context,
1096 Ret (T::*func)(Params...),
1098 static_assert(
sizeof...(Args) < 4,
1099 "No greater than three bound arguments can be passed to "
1100 "TaskManager::make_task_when() taking a member function.");
1104 std::auto_ptr<const Cgu::Callback::Callback>(),
1110 std::forward<Args>(args)...);
1114 GMainContext* context,
1116 Ret (T::*func)(Params...),
1118 static_assert(
sizeof...(Args) < 4,
1119 "No greater than three bound arguments can be passed to "
1120 "TaskManager::make_task_when() taking a member function.");
1124 std::unique_ptr<const Cgu::Callback::Callback>(),
1130 std::forward<Args>(args)...);
1179 template <
class Ret,
class... Params,
class... Args,
class T>
1181 Ret (T::*func)(Params...)
const,
1300 template <
class Ret,
class... Params,
class... Args,
class T>
1301 #ifdef CGU_USE_AUTO_PTR
1304 std::auto_ptr<const Cgu::Callback::Callback> fail,
1307 GMainContext* context,
1309 Ret (T::*func)(Params...)
const,
1314 std::unique_ptr<const Cgu::Callback::Callback> fail,
1317 GMainContext* context,
1319 Ret (T::*func)(Params...)
const,
1389 template <
class Ret,
class... Params,
class... Args,
class T>
1390 #ifdef CGU_USE_AUTO_PTR
1392 GMainContext* context,
1394 Ret (T::*func)(Params...)
const,
1396 static_assert(
sizeof...(Args) < 4,
1397 "No greater than three bound arguments can be passed to "
1398 "TaskManager::make_task_when() taking a member function.");
1402 std::auto_ptr<const Cgu::Callback::Callback>(),
1408 std::forward<Args>(args)...);
1412 GMainContext* context,
1414 Ret (T::*func)(Params...)
const,
1416 static_assert(
sizeof...(Args) < 4,
1417 "No greater than three bound arguments can be passed to "
1418 "TaskManager::make_task_when() taking a member function.");
1422 std::unique_ptr<const Cgu::Callback::Callback>(),
1428 std::forward<Args>(args)...);
1474 template <
class Ret,
class... Params,
class... Args>
1591 template <
class Ret,
class... Params,
class... Args>
1592 #ifdef CGU_USE_AUTO_PTR
1595 std::auto_ptr<const Cgu::Callback::Callback> fail,
1598 GMainContext* context,
1599 Ret (*func)(Params...),
1604 std::unique_ptr<const Cgu::Callback::Callback> fail,
1607 GMainContext* context,
1608 Ret (*func)(Params...),
1675 template <
class Ret,
class... Params,
class... Args>
1676 #ifdef CGU_USE_AUTO_PTR
1678 GMainContext* context,
1679 Ret (*func)(Params...),
1681 static_assert(
sizeof...(Args) < 5,
1682 "No greater than four bound arguments can be passed to "
1683 "TaskManager::make_task_when() taking a function.");
1687 std::auto_ptr<const Cgu::Callback::Callback>(),
1692 std::forward<Args>(args)...);
1695 GMainContext* context,
1696 Ret (*func)(Params...),
1698 static_assert(
sizeof...(Args) < 5,
1699 "No greater than four bound arguments can be passed to "
1700 "TaskManager::make_task_when() taking a function.");
1704 std::unique_ptr<const Cgu::Callback::Callback>(),
1709 std::forward<Args>(args)...);
1781 template <
class Ret,
class Func>
1787 #ifndef DOXYGEN_PARSING
1788 template <
class Func>
1807 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
1808 typedef decltype(f()) Ret;
1809 #ifdef CGU_USE_AUTO_PTR
1810 typedef std::auto_ptr<const Callback::Callback> CbPtr;
1812 typedef std::unique_ptr<const Callback::Callback> CbPtr;
1816 CbPtr exec_cb(
new TaskManagerHelper::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
1817 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper::FunctorResultWrapper<Ret, FType>::do_fail,
1819 add_task(std::move(exec_cb), std::move(do_fail_cb));
1948 template <
class Ret,
class Func>
1949 #ifdef CGU_USE_AUTO_PTR
1952 std::auto_ptr<const Cgu::Callback::Callback> fail,
1955 GMainContext* context,
1960 std::unique_ptr<const Cgu::Callback::Callback> fail,
1963 GMainContext* context,
2044 template <
class Ret,
class Func>
2045 #ifdef CGU_USE_AUTO_PTR
2047 GMainContext* context,
2051 std::auto_ptr<const Cgu::Callback::Callback>(),
2055 std::forward<Func>(f));
2059 GMainContext* context,
2063 std::unique_ptr<const Cgu::Callback::Callback>(),
2067 std::forward<Func>(f));
2150 template <
class Ret,
class Func>
2151 #ifdef CGU_USE_AUTO_PTR
2153 GMainContext* context,
2157 std::auto_ptr<const Cgu::Callback::Callback>(),
2161 std::forward<Func>(f));
2165 GMainContext* context,
2169 std::unique_ptr<const Cgu::Callback::Callback>(),
2173 std::forward<Func>(f));
2222 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2223 unsigned int idle = 10000,
bool blocking =
true,
2285 #include <c++-gtk-utils/task_manager.tpp>