handler.h raw
1 // Copyright (c) 2018-2022 The Limenka developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef LIMENKA_INTERFACES_HANDLER_H
6 #define LIMENKA_INTERFACES_HANDLER_H
7
8 #include <functional>
9 #include <memory>
10
11 namespace boost {
12 namespace signals2 {
13 class connection;
14 } // namespace signals2
15 } // namespace boost
16
17 namespace interfaces {
18
19 //! Generic interface for managing an event handler or callback function
20 //! registered with another interface. Has a single disconnect method to cancel
21 //! the registration and prevent any future notifications.
22 class Handler
23 {
24 public:
25 virtual ~Handler() = default;
26
27 //! Disconnect the handler.
28 virtual void disconnect() = 0;
29 };
30
31 //! Return handler wrapping a boost signal connection.
32 std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection);
33
34 //! Return handler wrapping a cleanup function.
35 std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup);
36
37 } // namespace interfaces
38
39 #endif // LIMENKA_INTERFACES_HANDLER_H
40