39 #ifndef CGU_CALLBACK_H
40 #define CGU_CALLBACK_H
496 #include <functional>
500 #include <type_traits>
597 template <
class... FreeArgs>
637 #ifdef CGU_USE_GLIB_MEMORY_SLICES_NO_COMPAT
726 return std::unique_ptr<
const CallbackArg<T...>>(cb);
745 template <
class... T>
747 return (f1.cb_s.get() == f2.cb_s.get());
755 template <
class... T>
773 template <
class... T>
775 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
783 template <
class... T>
785 return (f1.cb_s.get() == f2.cb_s.get());
793 template <
class... T>
806 template <
class... T>
808 return std::less<
const CallbackArg<T...>*>()(f1.cb_s.get(), f2.cb_s.get());
817 #ifndef DOXYGEN_PARSING
822 template <
class... T>
823 struct hash<
Cgu::Callback::FunctorArg<T...>> {
824 typedef std::size_t result_type;
826 result_type operator()(
const argument_type& f)
const {
833 template <
class... T>
834 struct hash<
Cgu::Callback::SafeFunctorArg<T...>> {
835 typedef std::size_t result_type;
837 result_type operator()(
const argument_type& f)
const {
846 #endif // DOXYGEN_PARSING
909 template <
class... FreeArgs>
911 SharedPtr<
const CallbackArg<FreeArgs...>> cb_s;
934 if (cb_s.get()) cb_s->dispatch(args...);
1031 template <
class... FreeArgs>
1032 class SafeFunctorArg {
1047 if (cb_s.get()) cb_s->dispatch(args...);
1161 template<
class... T>
1201 template<
class... T>
1208 template <
class T,
class... FreeArgs>
1217 (obj->*func)(free_args...);
1222 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1225 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...);
1232 (obj->*func)(arg, free_args...);
1234 template <
class Arg>
1236 Arg&& arg_): obj(&obj_), func(func_), arg(
std::forward<Arg>(arg_)) {}
1239 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1242 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...);
1250 (obj->*func)(arg1, arg2, free_args...);
1252 template <
class Arg1,
class Arg2>
1255 Arg2&& arg2_): obj(&obj_), func(func_),
1256 arg1(
std::forward<Arg1>(arg1_)),
1257 arg2(
std::forward<Arg2>(arg2_)) {}
1260 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1263 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1272 (obj->*func)(arg1, arg2, arg3, free_args...);
1274 template <
class Arg1,
class Arg2,
class Arg3>
1279 obj(&obj_), func(func_),
1280 arg1(
std::forward<Arg1>(arg1_)),
1281 arg2(
std::forward<Arg2>(arg2_)),
1282 arg3(
std::forward<Arg3>(arg3_)) {}
1285 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1286 class BoundArg4,
class... FreeArgs>
1289 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
1299 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1301 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1307 obj(&obj_), func(func_),
1308 arg1(
std::forward<Arg1>(arg1_)),
1309 arg2(
std::forward<Arg2>(arg2_)),
1310 arg3(
std::forward<Arg3>(arg3_)),
1311 arg4(
std::forward<Arg4>(arg4_)) {}
1314 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1315 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1318 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1319 BoundArg4, BoundArg5, FreeArgs...);
1330 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1332 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1339 obj(&obj_), func(func_),
1340 arg1(
std::forward<Arg1>(arg1_)),
1341 arg2(
std::forward<Arg2>(arg2_)),
1342 arg3(
std::forward<Arg3>(arg3_)),
1343 arg4(
std::forward<Arg4>(arg4_)),
1344 arg5(
std::forward<Arg5>(arg5_)) {}
1349 template <
class T,
class... FreeArgs>
1358 (obj->*func)(free_args...);
1363 template <
bool unref,
class T,
class BoundArg,
class... FreeArgs>
1366 typedef void (T::*
MemFunc)(BoundArg, FreeArgs...)
const;
1373 (obj->*func)(arg, free_args...);
1375 template <
class Arg>
1377 Arg&& arg_): obj(&obj_), func(func_), arg(
std::forward<Arg>(arg_)) {}
1380 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1383 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, FreeArgs...)
const;
1391 (obj->*func)(arg1, arg2, free_args...);
1393 template <
class Arg1,
class Arg2>
1396 Arg2&& arg2_): obj(&obj_), func(func_),
1397 arg1(
std::forward<Arg1>(arg1_)),
1398 arg2(
std::forward<Arg2>(arg2_)) {}
1401 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1404 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const;
1413 (obj->*func)(arg1, arg2, arg3, free_args...);
1415 template <
class Arg1,
class Arg2,
class Arg3>
1420 obj(&obj_), func(func_),
1421 arg1(
std::forward<Arg1>(arg1_)),
1422 arg2(
std::forward<Arg2>(arg2_)),
1423 arg3(
std::forward<Arg3>(arg3_)) {}
1426 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1427 class BoundArg4,
class... FreeArgs>
1430 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
const;
1440 (obj->*func)(arg1, arg2, arg3, arg4, free_args...);
1442 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1448 obj(&obj_), func(func_),
1449 arg1(
std::forward<Arg1>(arg1_)),
1450 arg2(
std::forward<Arg2>(arg2_)),
1451 arg3(
std::forward<Arg3>(arg3_)),
1452 arg4(
std::forward<Arg4>(arg4_)) {}
1455 template <
bool unref,
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1456 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1459 typedef void (T::*
MemFunc)(BoundArg1, BoundArg2, BoundArg3,
1460 BoundArg4, BoundArg5, FreeArgs...)
const;
1471 (obj->*func)(arg1, arg2, arg3, arg4, arg5, free_args...);
1473 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1480 obj(&obj_), func(func_),
1481 arg1(
std::forward<Arg1>(arg1_)),
1482 arg2(
std::forward<Arg2>(arg2_)),
1483 arg3(
std::forward<Arg3>(arg3_)),
1484 arg4(
std::forward<Arg4>(arg4_)),
1485 arg5(
std::forward<Arg5>(arg5_)) {}
1490 template <
class... FreeArgs>
1503 template <
bool unref,
class BoundArg,
class... FreeArgs>
1506 typedef void (*
Func)(BoundArg, FreeArgs...);
1512 func(arg, free_args...);
1514 template <
class Arg>
1518 template <
bool unref,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1521 typedef void (*
Func)(BoundArg1, BoundArg2, FreeArgs...);
1528 func(arg1, arg2, free_args...);
1530 template <
class Arg1,
class Arg2>
1532 Arg2&& arg2_): func(func_),
1533 arg1(
std::forward<Arg1>(arg1_)),
1534 arg2(
std::forward<Arg2>(arg2_)) {}
1537 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1540 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...);
1548 func(arg1, arg2, arg3, free_args...);
1550 template <
class Arg1,
class Arg2,
class Arg3>
1556 arg1(
std::forward<Arg1>(arg1_)),
1557 arg2(
std::forward<Arg2>(arg2_)),
1558 arg3(
std::forward<Arg3>(arg3_)) {}
1561 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1562 class BoundArg4,
class... FreeArgs>
1565 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...);
1574 func(arg1, arg2, arg3, arg4, free_args...);
1576 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4>
1583 arg1(
std::forward<Arg1>(arg1_)),
1584 arg2(
std::forward<Arg2>(arg2_)),
1585 arg3(
std::forward<Arg3>(arg3_)),
1586 arg4(
std::forward<Arg4>(arg4_)) {}
1589 template <
bool unref,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1590 class BoundArg4,
class BoundArg5,
class... FreeArgs>
1593 typedef void (*
Func)(BoundArg1, BoundArg2, BoundArg3,
1594 BoundArg4, BoundArg5, FreeArgs...);
1604 func(arg1, arg2, arg3, arg4, arg5, free_args...);
1606 template <
class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5>
1614 arg1(
std::forward<Arg1>(arg1_)),
1615 arg2(
std::forward<Arg2>(arg2_)),
1616 arg3(
std::forward<Arg3>(arg3_)),
1617 arg4(
std::forward<Arg4>(arg4_)),
1618 arg5(
std::forward<Arg5>(arg5_)) {}
1629 template <
class... FreeArgs>
1631 std::function<void(FreeArgs...)> f;
1639 template <
class Lambda,
class... FreeArgs>
1664 template <
class T,
class... FreeArgs>
1666 void (T::*func)(FreeArgs...)) {
1667 return new Callback0<T, FreeArgs...>{t, func};
1682 template <
class T,
class... FreeArgs>
1684 void (T::*func)(FreeArgs...)) {
1685 return new Callback0<T, FreeArgs...>{t, func};
1700 template <
class T,
class... FreeArgs>
1702 void (T::*func)(FreeArgs...)) {
1703 return new Callback0<T, FreeArgs...>{t, func};
1717 template <
class T,
class BoundArg,
class... FreeArgs>
1719 void (T::*func)(BoundArg, FreeArgs...),
1721 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
1741 template <
class T,
class BoundArg,
class... FreeArgs>
1743 void (T::*func)(BoundArg, FreeArgs...),
1744 const BoundArg& arg) {
1745 return new Callback1<
false, T, BoundArg, FreeArgs...>{t, func, arg};
1765 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
1767 void (T::*func)(BoundArg, FreeArgs...),
1769 return new Callback1<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
1783 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1785 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
1788 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
1808 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
1810 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
1811 const BoundArg1& arg1,
1812 const BoundArg2& arg2) {
1813 return new Callback2<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
1833 template <
class T,
class BoundArg1,
class BoundArg2,
1834 class Arg1,
class Arg2,
class... FreeArgs>
1836 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...),
1839 return new Callback2<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
1840 std::forward<Arg1>(arg1),
1841 std::forward<Arg2>(arg2)};
1855 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1857 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
1861 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
1881 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
1883 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
1884 const BoundArg1& arg1,
1885 const BoundArg2& arg2,
1886 const BoundArg3& arg3) {
1887 return new Callback3<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
1907 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1908 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
1910 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
1914 return new Callback3<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
1915 std::forward<Arg1>(arg1),
1916 std::forward<Arg2>(arg2),
1917 std::forward<Arg3>(arg3)};
1931 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1932 class BoundArg4,
class... FreeArgs>
1934 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
1935 BoundArg4, FreeArgs...),
1940 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
1941 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
1961 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
1962 class BoundArg4,
class... FreeArgs>
1964 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
1965 BoundArg4, FreeArgs...),
1966 const BoundArg1& arg1,
1967 const BoundArg2& arg2,
1968 const BoundArg3& arg3,
1969 const BoundArg4& arg4) {
1970 return new Callback4<
false, T, BoundArg1, BoundArg2, BoundArg3,
1971 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
1991 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
1992 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
1994 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
1995 BoundArg4, FreeArgs...),
2000 return new Callback4<
true, T, BoundArg1, BoundArg2, BoundArg3,
2001 BoundArg4, FreeArgs...>{t, func,
2002 std::forward<Arg1>(arg1),
2003 std::forward<Arg2>(arg2),
2004 std::forward<Arg3>(arg3),
2005 std::forward<Arg4>(arg4)};
2019 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2020 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2022 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2023 BoundArg4, BoundArg5, FreeArgs...),
2029 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2030 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2050 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2051 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2053 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2054 BoundArg4, BoundArg5, FreeArgs...),
2055 const BoundArg1& arg1,
2056 const BoundArg2& arg2,
2057 const BoundArg3& arg3,
2058 const BoundArg4& arg4,
2059 const BoundArg5& arg5) {
2060 return new Callback5<
false, T, BoundArg1, BoundArg2, BoundArg3,
2061 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2081 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2082 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2084 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2085 BoundArg4, BoundArg5, FreeArgs...),
2091 return new Callback5<
true, T, BoundArg1, BoundArg2, BoundArg3,
2092 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2093 std::forward<Arg1>(arg1),
2094 std::forward<Arg2>(arg2),
2095 std::forward<Arg3>(arg3),
2096 std::forward<Arg4>(arg4),
2097 std::forward<Arg5>(arg5)};
2111 template <
class T,
class... FreeArgs>
2113 void (T::*func)(FreeArgs...)
const) {
2129 template <
class T,
class... FreeArgs>
2131 void (T::*func)(FreeArgs...)
const) {
2147 template <
class T,
class... FreeArgs>
2149 void (T::*func)(FreeArgs...)
const) {
2164 template <
class T,
class BoundArg,
class... FreeArgs>
2166 void (T::*func)(BoundArg, FreeArgs...)
const,
2168 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2188 template <
class T,
class BoundArg,
class... FreeArgs>
2190 void (T::*func)(BoundArg, FreeArgs...)
const,
2191 const BoundArg& arg) {
2192 return new Callback1_const<
false, T, BoundArg, FreeArgs...>{t, func, arg};
2212 template <
class T,
class BoundArg,
class Arg,
class... FreeArgs>
2214 void (T::*func)(BoundArg, FreeArgs...)
const,
2216 return new Callback1_const<
true, T, BoundArg, FreeArgs...>{t, func, std::forward<Arg>(arg)};
2230 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2232 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2235 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2255 template <
class T,
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2257 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2258 const BoundArg1& arg1,
2259 const BoundArg2& arg2) {
2260 return new Callback2_const<
false, T, BoundArg1, BoundArg2, FreeArgs...>{t, func, arg1, arg2};
2280 template <
class T,
class BoundArg1,
class BoundArg2,
2281 class Arg1,
class Arg2,
class... FreeArgs>
2283 void (T::*func)(BoundArg1, BoundArg2, FreeArgs...)
const,
2286 return new Callback2_const<
true, T, BoundArg1, BoundArg2, FreeArgs...>{t, func,
2287 std::forward<Arg1>(arg1),
2288 std::forward<Arg2>(arg2)};
2302 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2304 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2308 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2328 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2330 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2331 const BoundArg1& arg1,
2332 const BoundArg2& arg2,
2333 const BoundArg3& arg3) {
2334 return new Callback3_const<
false, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func, arg1, arg2, arg3};
2354 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2355 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2357 void (T::*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
const,
2361 return new Callback3_const<
true, T, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{t, func,
2362 std::forward<Arg1>(arg1),
2363 std::forward<Arg2>(arg2),
2364 std::forward<Arg3>(arg3)};
2378 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2379 class BoundArg4,
class... FreeArgs>
2381 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2382 BoundArg4, FreeArgs...)
const,
2388 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2408 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2409 class BoundArg4,
class... FreeArgs>
2411 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2412 BoundArg4, FreeArgs...)
const,
2413 const BoundArg1& arg1,
2414 const BoundArg2& arg2,
2415 const BoundArg3& arg3,
2416 const BoundArg4& arg4) {
2418 BoundArg4, FreeArgs...>{t, func, arg1, arg2, arg3, arg4};
2438 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2439 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2441 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2442 BoundArg4, FreeArgs...)
const,
2448 BoundArg4, FreeArgs...>{t, func,
2449 std::forward<Arg1>(arg1),
2450 std::forward<Arg2>(arg2),
2451 std::forward<Arg3>(arg3),
2452 std::forward<Arg4>(arg4)};
2466 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2467 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2469 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2470 BoundArg4, BoundArg5, FreeArgs...)
const,
2477 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2497 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
2498 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2500 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2501 BoundArg4, BoundArg5, FreeArgs...)
const,
2502 const BoundArg1& arg1,
2503 const BoundArg2& arg2,
2504 const BoundArg3& arg3,
2505 const BoundArg4& arg4,
2506 const BoundArg5& arg5) {
2508 BoundArg4, BoundArg5, FreeArgs...>{t, func, arg1, arg2, arg3, arg4, arg5};
2528 template <
class T,
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2529 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2531 void (T::*func)(BoundArg1, BoundArg2, BoundArg3,
2532 BoundArg4, BoundArg5, FreeArgs...)
const,
2539 BoundArg4, BoundArg5, FreeArgs...>{t, func,
2540 std::forward<Arg1>(arg1),
2541 std::forward<Arg2>(arg2),
2542 std::forward<Arg3>(arg3),
2543 std::forward<Arg4>(arg4),
2544 std::forward<Arg5>(arg5)};
2558 template <
class... FreeArgs>
2575 template <
class... FreeArgs>
2592 template <
class... FreeArgs>
2608 template <
class BoundArg,
class... FreeArgs>
2631 template <
class BoundArg,
class... FreeArgs>
2633 const BoundArg& arg) {
2654 template <
class BoundArg,
class Arg,
class... FreeArgs>
2657 return new Callback1_static<
true, BoundArg, FreeArgs...>{func, std::forward<Arg>(arg)};
2671 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2675 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
2695 template <
class BoundArg1,
class BoundArg2,
class... FreeArgs>
2697 const BoundArg1& arg1,
2698 const BoundArg2& arg2) {
2699 return new Callback2_static<
false, BoundArg1, BoundArg2, FreeArgs...>{func, arg1, arg2};
2719 template <
class BoundArg1,
class BoundArg2,
class Arg1,
class Arg2,
class... FreeArgs>
2724 std::forward<Arg1>(arg1),
2725 std::forward<Arg2>(arg2)};
2739 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2740 CallbackArg<FreeArgs...>*
make(
void (*func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...),
2744 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
2764 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class... FreeArgs>
2766 const BoundArg1& arg1,
2767 const BoundArg2& arg2,
2768 const BoundArg3& arg3) {
2769 return new Callback3_static<
false, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func, arg1, arg2, arg3};
2789 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
2790 class Arg1,
class Arg2,
class Arg3,
class... FreeArgs>
2795 return new Callback3_static<
true, BoundArg1, BoundArg2, BoundArg3, FreeArgs...>{func,
2796 std::forward<Arg1>(arg1),
2797 std::forward<Arg2>(arg2),
2798 std::forward<Arg3>(arg3)};
2812 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
2813 class BoundArg4,
class... FreeArgs>
2815 BoundArg4, FreeArgs...),
2821 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
2841 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
2842 class BoundArg4,
class... FreeArgs>
2844 BoundArg4, FreeArgs...),
2845 const BoundArg1& arg1,
2846 const BoundArg2& arg2,
2847 const BoundArg3& arg3,
2848 const BoundArg4& arg4) {
2850 BoundArg4, FreeArgs...>{func, arg1, arg2, arg3, arg4};
2870 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
2871 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class... FreeArgs>
2873 BoundArg4, FreeArgs...),
2879 BoundArg4, FreeArgs...>{func,
2880 std::forward<Arg1>(arg1),
2881 std::forward<Arg2>(arg2),
2882 std::forward<Arg3>(arg3),
2883 std::forward<Arg4>(arg4)};
2897 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
2898 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2900 BoundArg4, BoundArg5, FreeArgs...),
2907 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
2927 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
2928 class BoundArg4,
class BoundArg5,
class... FreeArgs>
2930 BoundArg4, BoundArg5, FreeArgs...),
2931 const BoundArg1& arg1,
2932 const BoundArg2& arg2,
2933 const BoundArg3& arg3,
2934 const BoundArg4& arg4,
2935 const BoundArg5& arg5) {
2937 BoundArg4, BoundArg5, FreeArgs...>{func, arg1, arg2, arg3, arg4, arg5};
2957 template <
class BoundArg1,
class BoundArg2,
class BoundArg3,
class BoundArg4,
class BoundArg5,
2958 class Arg1,
class Arg2,
class Arg3,
class Arg4,
class Arg5,
class... FreeArgs>
2960 BoundArg4, BoundArg5, FreeArgs...),
2967 BoundArg4, BoundArg5, FreeArgs...>{func,
2968 std::forward<Arg1>(arg1),
2969 std::forward<Arg2>(arg2),
2970 std::forward<Arg3>(arg3),
2971 std::forward<Arg4>(arg4),
2972 std::forward<Arg5>(arg5)};
2989 template <
class... FreeArgs>
3010 template <
class... FreeArgs>
3029 template <
class... FreeArgs>
3046 template <
class... FreeArgs>
3067 template <
class... FreeArgs>
3086 template <
class... FreeArgs>
3131 template <
class... FreeArgs,
class Lambda>
3133 typedef typename std::remove_const<typename std::remove_reference<Lambda>::type>::type LType;
3134 return new Callback_lambda<LType, FreeArgs...>{std::forward<Lambda>(l)};
3167 void post(
const Callback* cb, gint priority = G_PRIORITY_DEFAULT_IDLE,
3168 GMainContext* context = 0);
3219 gint priority = G_PRIORITY_DEFAULT_IDLE, GMainContext* context = 0);
void operator()(typename Cgu::Param< FreeArgs >::ParamType...args) const
Definition: callback.h:933
FunctorArg Functor
Definition: callback.h:732
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...) const
Definition: callback.h:1430
Callback3_const(const T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_)
Definition: callback.h:1416
void(* Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, BoundArg5, FreeArgs...)
Definition: callback.h:1593
Callback2_const(const T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_)
Definition: callback.h:1394
Definition: callback.h:1223
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
Definition: callback.h:1263
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1357
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1645
CallbackArg< FreeArgs...> * make_ref(T &t, void(T::*func)(FreeArgs...))
Definition: callback.h:1701
SafeFunctorArg< T...> to_safe_functor(const CallbackArg< T...> *cb)
Definition: callback.h:1202
bool operator!=(const FunctorArg< T...> &f1, const FunctorArg< T...> &f2)
Definition: callback.h:756
Definition: callback.h:1428
void(T::* MemFunc)(BoundArg1, BoundArg2, FreeArgs...)
Definition: callback.h:1242
void(* Func)(FreeArgs...)
Definition: callback.h:1493
CallbackArg< FreeArgs...> * make(T &t, void(T::*func)(FreeArgs...))
Definition: callback.h:1665
Definition: callback.h:1630
void(* Func)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...)
Definition: callback.h:1540
Callback0(T &obj_, MemFunc func_)
Definition: callback.h:1219
FunctorArg(FunctorArg &&f)
Definition: callback.h:994
This is a smart pointer for managing the lifetime of objects allocated on freestore, with a thread safe reference count.
Definition: shared_ptr.h:644
void(T::* MemFunc)(FreeArgs...) const
Definition: callback.h:1352
SafeFunctorArg(const SafeFunctorArg &f)
Definition: callback.h:1101
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
Definition: callback.h:1289
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1633
Definition: callback.h:1261
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1547
Struct which will conditionally convert a reference type to a value type.
Definition: param.h:103
Definition: callback.h:1364
Definition: callback.h:1504
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1249
Functor class holding a Callback::CallbackArg object.
Definition: callback.h:731
Definition: callback.h:1519
Definition: callback.h:1591
const T & ParamType
Definition: param.h:77
Definition: callback.h:1538
Callback_lambda(L &&l_)
Definition: callback.h:1646
Definition: callback.h:1563
Callback3(T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_)
Definition: callback.h:1275
void(T::* MemFunc)(BoundArg1, BoundArg2, FreeArgs...) const
Definition: callback.h:1383
Definition: callback.h:1491
SafeFunctorArg()
Definition: callback.h:1119
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, BoundArg5, FreeArgs...) const
Definition: callback.h:1459
A specialization of std::hash for Cgu::Callback::FunctorArg, Cgu::Callback::SafeFunctorArg, Cgu::GobjHandle, Cgu::GvarHandle, Cgu::IntrusivePtr, Cgu::SharedHandle, Cgu::SharedLockHandle, Cgu::SharedPtr and Cgu::SharedLockPtr so that such objects may be keys of unordered associative containers.
Definition: callback.h:1402
Callback_function(std::function< void(FreeArgs...)> &&f_)
Definition: callback.h:1635
Callback_function(const std::function< void(FreeArgs...)> &f_)
Definition: callback.h:1634
SafeFunctorArg(const CallbackArg< FreeArgs...> *cb)
Definition: callback.h:1095
Definition: callback.h:1209
FunctorArg()
Definition: callback.h:1001
SafeFunctorArg SafeFunctor
Definition: callback.h:734
SafeFunctorArg(SafeFunctorArg &&f)
Definition: callback.h:1107
FunctorArg(const CallbackArg< FreeArgs...> *cb)
Definition: callback.h:982
Definition: callback.h:1457
void(T::* MemFunc)(BoundArg, FreeArgs...) const
Definition: callback.h:1366
void(* Func)(BoundArg1, BoundArg2, FreeArgs...)
Definition: callback.h:1521
bool operator==(const FunctorArg< T...> &f1, const FunctorArg< T...> &f2)
Definition: callback.h:746
Callback4_const(const T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_)
Definition: callback.h:1443
Callback0_const(const T &obj_, MemFunc func_)
Definition: callback.h:1360
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, FreeArgs...) const
Definition: callback.h:1404
void(T::* MemFunc)(BoundArg, FreeArgs...)
Definition: callback.h:1225
Callback1(T &obj_, MemFunc func_, Arg &&arg_)
Definition: callback.h:1235
CallbackArg< FreeArgs...> * make_val(T &t, void(T::*func)(FreeArgs...))
Definition: callback.h:1683
CallbackArg< FreeArgs...> * lambda(Lambda &&l)
Definition: callback.h:3132
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1603
Definition: callback.h:1381
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1390
Callback4(T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_)
Definition: callback.h:1302
Callback5_const(const T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_, Arg5 &&arg5_)
Definition: callback.h:1474
FunctorArg & operator=(FunctorArg &&f)
Definition: callback.h:949
Definition: callback.h:1640
Definition: callback.h:1316
Callback1_const(const T &obj_, MemFunc func_, Arg &&arg_)
Definition: callback.h:1376
FunctorArg & operator=(const FunctorArg &f)
Definition: callback.h:942
void(T::* MemFunc)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, BoundArg5, FreeArgs...)
Definition: callback.h:1318
Definition: application.h:44
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1412
FunctorArg(const FunctorArg &f)
Definition: callback.h:988
virtual void dispatch(typename Cgu::Param< FreeArgs >::ParamType...args) const =0
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1511
Callback4_static(Func func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_)
Definition: callback.h:1577
SafeFunctorArg & operator=(const SafeFunctorArg &f)
Definition: callback.h:1055
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1329
Callback3_static(Func func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_)
Definition: callback.h:1551
Functor class holding a Callback::CallbackArg object, with thread-safe reference count.
Definition: callback.h:732
bool operator<(const FunctorArg< T...> &f1, const FunctorArg< T...> &f2)
Definition: callback.h:774
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1372
Callback5(T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_, Arg5 &&arg5_)
Definition: callback.h:1333
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1497
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1470
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1271
void(* Func)(BoundArg1, BoundArg2, BoundArg3, BoundArg4, FreeArgs...)
Definition: callback.h:1565
void operator()(typename Cgu::Param< FreeArgs >::ParamType...args) const
Definition: callback.h:1046
Callback2_static(Func func_, Arg1 &&arg1_, Arg2 &&arg2_)
Definition: callback.h:1531
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1573
Callback2(T &obj_, MemFunc func_, Arg1 &&arg1_, Arg2 &&arg2_)
Definition: callback.h:1253
void(* Func)(BoundArg, FreeArgs...)
Definition: callback.h:1506
Definition: callback.h:1240
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1439
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1527
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1231
CallbackArg()
Definition: callback.h:628
SafeFunctorArg & operator=(SafeFunctorArg &&f)
Definition: callback.h:1062
Definition: callback.h:1350
CallbackArg Callback
Definition: callback.h:522
Callback1_static(Func func_, Arg &&arg_)
Definition: callback.h:1515
virtual ~CallbackArg()
Definition: callback.h:634
std::unique_ptr< const CallbackArg< T...> > to_unique(const CallbackArg< T...> *cb)
Definition: callback.h:725
The callback interface class.
Definition: callback.h:522
#define CGU_GLIB_MEMORY_SLICES_FUNCS
Definition: cgu_config.h:84
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1298
void dispatch(typename Cgu::Param< FreeArgs >::ParamType...free_args) const
Definition: callback.h:1216
A class used for tracking EmitterArg and SafeEmitterArg connections.
Definition: emitter.h:333
Callback0_static(Func func_)
Definition: callback.h:1500
void(T::* MemFunc)(FreeArgs...)
Definition: callback.h:1211
FunctorArg< T...> to_functor(const CallbackArg< T...> *cb)
Definition: callback.h:1162
Callback5_static(Func func_, Arg1 &&arg1_, Arg2 &&arg2_, Arg3 &&arg3_, Arg4 &&arg4_, Arg5 &&arg5_)
Definition: callback.h:1607
void post(const Callback *cb, gint priority=G_PRIORITY_DEFAULT_IDLE, GMainContext *context=0)
Definition: callback.h:1287