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";}
356 namespace TaskManagerHelper2 {
358 template <
class Ret,
class FType>
384 template <
class Ret,
class FType>
386 mutable FType functor;
392 template <
class FunctorArg>
406 typedef std::pair<std::unique_ptr<const Callback::Callback>,
407 std::unique_ptr<const Callback::Callback>> QueueItemType;
744 #ifdef CGU_USE_AUTO_PTR
745 add_task(std::auto_ptr<const Callback::Callback>(task),
746 std::auto_ptr<const Callback::Callback>());
748 add_task(std::unique_ptr<const Callback::Callback>(task),
749 std::unique_ptr<const Callback::Callback>());
825 #ifdef CGU_USE_AUTO_PTR
826 void add_task(std::auto_ptr<const Callback::Callback> task,
827 std::auto_ptr<const Callback::Callback> fail);
829 void add_task(std::unique_ptr<const Callback::Callback> task,
830 std::unique_ptr<const Callback::Callback> fail);
902 template <
class Ret,
class... Params,
class... Args,
class T>
904 Ret (T::*func)(Params...),
1036 template <
class Ret,
class... Params,
class... Args,
class T>
1037 #ifdef CGU_USE_AUTO_PTR
1040 std::auto_ptr<const Cgu::Callback::Callback> fail,
1043 GMainContext* context,
1045 Ret (T::*func)(Params...),
1050 std::unique_ptr<const Cgu::Callback::Callback> fail,
1053 GMainContext* context,
1055 Ret (T::*func)(Params...),
1135 template <
class Ret,
class... Params,
class... Args,
class T>
1136 #ifdef CGU_USE_AUTO_PTR
1138 GMainContext* context,
1140 Ret (T::*func)(Params...),
1142 static_assert(
sizeof...(Args) < 4,
1143 "No greater than three bound arguments can be passed to "
1144 "TaskManager::make_task_when() taking a member function.");
1148 std::auto_ptr<const Cgu::Callback::Callback>(),
1154 std::forward<Args>(args)...);
1158 GMainContext* context,
1160 Ret (T::*func)(Params...),
1162 static_assert(
sizeof...(Args) < 4,
1163 "No greater than three bound arguments can be passed to "
1164 "TaskManager::make_task_when() taking a member function.");
1168 std::unique_ptr<const Cgu::Callback::Callback>(),
1174 std::forward<Args>(args)...);
1229 template <
class Ret,
class... Params,
class... Args,
class T>
1231 Ret (T::*func)(Params...)
const,
1363 template <
class Ret,
class... Params,
class... Args,
class T>
1364 #ifdef CGU_USE_AUTO_PTR
1367 std::auto_ptr<const Cgu::Callback::Callback> fail,
1370 GMainContext* context,
1372 Ret (T::*func)(Params...)
const,
1377 std::unique_ptr<const Cgu::Callback::Callback> fail,
1380 GMainContext* context,
1382 Ret (T::*func)(Params...)
const,
1462 template <
class Ret,
class... Params,
class... Args,
class T>
1463 #ifdef CGU_USE_AUTO_PTR
1465 GMainContext* context,
1467 Ret (T::*func)(Params...)
const,
1469 static_assert(
sizeof...(Args) < 4,
1470 "No greater than three bound arguments can be passed to "
1471 "TaskManager::make_task_when() taking a member function.");
1475 std::auto_ptr<const Cgu::Callback::Callback>(),
1481 std::forward<Args>(args)...);
1485 GMainContext* context,
1487 Ret (T::*func)(Params...)
const,
1489 static_assert(
sizeof...(Args) < 4,
1490 "No greater than three bound arguments can be passed to "
1491 "TaskManager::make_task_when() taking a member function.");
1495 std::unique_ptr<const Cgu::Callback::Callback>(),
1501 std::forward<Args>(args)...);
1553 template <
class Ret,
class... Params,
class... Args>
1683 template <
class Ret,
class... Params,
class... Args>
1684 #ifdef CGU_USE_AUTO_PTR
1687 std::auto_ptr<const Cgu::Callback::Callback> fail,
1690 GMainContext* context,
1691 Ret (*func)(Params...),
1696 std::unique_ptr<const Cgu::Callback::Callback> fail,
1699 GMainContext* context,
1700 Ret (*func)(Params...),
1777 template <
class Ret,
class... Params,
class... Args>
1778 #ifdef CGU_USE_AUTO_PTR
1780 GMainContext* context,
1781 Ret (*func)(Params...),
1783 static_assert(
sizeof...(Args) < 5,
1784 "No greater than four bound arguments can be passed to "
1785 "TaskManager::make_task_when() taking a function.");
1789 std::auto_ptr<const Cgu::Callback::Callback>(),
1794 std::forward<Args>(args)...);
1797 GMainContext* context,
1798 Ret (*func)(Params...),
1800 static_assert(
sizeof...(Args) < 5,
1801 "No greater than four bound arguments can be passed to "
1802 "TaskManager::make_task_when() taking a function.");
1806 std::unique_ptr<const Cgu::Callback::Callback>(),
1811 std::forward<Args>(args)...);
1889 template <
class Ret,
class Func>
1895 #ifndef DOXYGEN_PARSING
1896 template <
class Func>
1915 typedef typename std::remove_const<typename std::remove_reference<Func>::type>::type FType;
1916 typedef decltype(f()) Ret;
1917 #ifdef CGU_USE_AUTO_PTR
1918 typedef std::auto_ptr<const Callback::Callback> CbPtr;
1920 typedef std::unique_ptr<const Callback::Callback> CbPtr;
1924 CbPtr exec_cb(
new TaskManagerHelper2::FunctorResultExec<Ret, FType>(std::forward<Func>(f), ret));
1925 CbPtr do_fail_cb(
Callback::make_ref(&TaskManagerHelper2::FunctorResultWrapper<Ret, FType>::do_fail,
1927 add_task(std::move(exec_cb), std::move(do_fail_cb));
2072 template <
class Ret,
class Func>
2073 #ifdef CGU_USE_AUTO_PTR
2076 std::auto_ptr<const Cgu::Callback::Callback> fail,
2079 GMainContext* context,
2084 std::unique_ptr<const Cgu::Callback::Callback> fail,
2087 GMainContext* context,
2177 template <
class Ret,
class Func>
2178 #ifdef CGU_USE_AUTO_PTR
2180 GMainContext* context,
2184 std::auto_ptr<const Cgu::Callback::Callback>(),
2188 std::forward<Func>(f));
2192 GMainContext* context,
2196 std::unique_ptr<const Cgu::Callback::Callback>(),
2200 std::forward<Func>(f));
2291 template <
class Ret,
class Func>
2292 #ifdef CGU_USE_AUTO_PTR
2294 GMainContext* context,
2298 std::auto_ptr<const Cgu::Callback::Callback>(),
2302 std::forward<Func>(f));
2306 GMainContext* context,
2310 std::unique_ptr<const Cgu::Callback::Callback>(),
2314 std::forward<Func>(f));
2363 TaskManager(
unsigned int max = 8,
unsigned int min = 0,
2364 unsigned int idle = 10000,
bool blocking =
true,
2506 #include <c++-gtk-utils/task_manager.tpp>