summaryrefslogtreecommitdiff
path: root/src/proxyutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/proxyutils.h')
-rw-r--r--src/proxyutils.h63
1 files changed, 36 insertions, 27 deletions
diff --git a/src/proxyutils.h b/src/proxyutils.h
index 6c85ba14..7aebf315 100644
--- a/src/proxyutils.h
+++ b/src/proxyutils.h
@@ -5,37 +5,46 @@
#include "organizerproxy.h"
-namespace MOShared {
+namespace MOShared
+{
- template <class Fn, class T = int>
- auto callIfPluginActive(OrganizerProxy* proxy, Fn&& callback, T defaultReturn = T{}) {
- return [fn = std::forward<Fn>(callback), proxy, defaultReturn](auto&& ...args) {
- if (proxy->isPluginEnabled(proxy->plugin())) {
- return fn(std::forward<decltype(args)>(args)...);
+template <class Fn, class T = int>
+auto callIfPluginActive(OrganizerProxy* proxy, Fn&& callback, T defaultReturn = T{})
+{
+ return [fn = std::forward<Fn>(callback), proxy, defaultReturn](auto&&... args) {
+ if (proxy->isPluginEnabled(proxy->plugin())) {
+ return fn(std::forward<decltype(args)>(args)...);
+ } else {
+ if constexpr (!std::is_same_v<
+ std::invoke_result_t<std::decay_t<Fn>, decltype(args)...>,
+ void>) {
+ return defaultReturn;
}
- else {
- if constexpr (!std::is_same_v<std::invoke_result_t<std::decay_t<Fn>, decltype(args)... >, void>) {
- return defaultReturn;
- }
- }
- };
- }
-
- // We need to connect to the organizer.
- template <class Signal, class T = int>
- auto callSignalIfPluginActive(OrganizerProxy* proxy, const Signal& signal, T defaultReturn = T{}) {
- return callIfPluginActive(proxy, [&signal](auto&&... args) {
- return signal(std::forward<decltype(args)>(args)...);
- }, defaultReturn);
- }
+ }
+ };
+}
- template <class Signal, class T = int>
- auto callSignalAlways(const Signal& signal) {
- return [&signal](auto&&... args) {
- return signal(std::forward<decltype(args)>(args)...);
- };
- }
+// We need to connect to the organizer.
+template <class Signal, class T = int>
+auto callSignalIfPluginActive(OrganizerProxy* proxy, const Signal& signal,
+ T defaultReturn = T{})
+{
+ return callIfPluginActive(
+ proxy,
+ [&signal](auto&&... args) {
+ return signal(std::forward<decltype(args)>(args)...);
+ },
+ defaultReturn);
+}
+template <class Signal, class T = int>
+auto callSignalAlways(const Signal& signal)
+{
+ return [&signal](auto&&... args) {
+ return signal(std::forward<decltype(args)>(args)...);
+ };
}
+} // namespace MOShared
+
#endif