FlightGear next
dbuscallbacks.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: (C) 2019-2022 swift Project Community / Contributors (https://swift-project.org/)
3 * SPDX-FileCopyrightText: (C) 2019-2022 Lars Toenning <dev@ltoenning.de>
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#pragma once
8
9#include <dbus/dbus.h>
10#include <functional>
11
13
14template <typename T>
16{
17public:
18 DBusAsyncCallbacks() = default;
19 DBusAsyncCallbacks(const std::function<dbus_bool_t(T*)>& add,
20 const std::function<void(T*)>& remove,
21 const std::function<void(T*)>& toggled)
22 : m_addHandler(add), m_removeHandler(remove), m_toggledHandler(toggled)
23 {
24 }
25
26 static dbus_bool_t add(T* watch, void* refcon)
27 {
28 return static_cast<DBusAsyncCallbacks*>(refcon)->m_addHandler(watch);
29 }
30
31 static void remove(T* watch, void* refcon)
32 {
33 return static_cast<DBusAsyncCallbacks*>(refcon)->m_removeHandler(watch);
34 }
35
36 static void toggled(T* watch, void* refcon)
37 {
38 return static_cast<DBusAsyncCallbacks*>(refcon)->m_toggledHandler(watch);
39 }
40
41private:
42 std::function<dbus_bool_t(T*)> m_addHandler;
43 std::function<void(T*)> m_removeHandler;
44 std::function<void(T*)> m_toggledHandler;
45};
46
47} // namespace flightgear::swift
static dbus_bool_t add(DBusWatch *watch, void *refcon)
DBusAsyncCallbacks(const std::function< dbus_bool_t(T *)> &add, const std::function< void(T *)> &remove, const std::function< void(T *)> &toggled)
static void toggled(DBusWatch *watch, void *refcon)
static void remove(DBusWatch *watch, void *refcon)