/root/bitcoin/src/common/interfaces.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2021-2022 The Bitcoin Core 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 | | #include <interfaces/echo.h> |
6 | | #include <interfaces/handler.h> |
7 | | |
8 | | #include <boost/signals2/connection.hpp> |
9 | | #include <memory> |
10 | | #include <utility> |
11 | | |
12 | | namespace common { |
13 | | namespace { |
14 | | class CleanupHandler : public interfaces::Handler |
15 | | { |
16 | | public: |
17 | 0 | explicit CleanupHandler(std::function<void()> cleanup) : m_cleanup(std::move(cleanup)) {} |
18 | 0 | ~CleanupHandler() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } |
19 | 0 | void disconnect() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } |
20 | | std::function<void()> m_cleanup; |
21 | | }; |
22 | | |
23 | | class SignalHandler : public interfaces::Handler |
24 | | { |
25 | | public: |
26 | 0 | explicit SignalHandler(boost::signals2::connection connection) : m_connection(std::move(connection)) {} |
27 | | |
28 | 0 | void disconnect() override { m_connection.disconnect(); } |
29 | | |
30 | | boost::signals2::scoped_connection m_connection; |
31 | | }; |
32 | | |
33 | | class EchoImpl : public interfaces::Echo |
34 | | { |
35 | | public: |
36 | 0 | std::string echo(const std::string& echo) override { return echo; } |
37 | | }; |
38 | | } // namespace |
39 | | } // namespace common |
40 | | |
41 | | namespace interfaces { |
42 | | std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup) |
43 | 0 | { |
44 | 0 | return std::make_unique<common::CleanupHandler>(std::move(cleanup)); |
45 | 0 | } |
46 | | |
47 | | std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection) |
48 | 0 | { |
49 | 0 | return std::make_unique<common::SignalHandler>(std::move(connection)); |
50 | 0 | } |
51 | | |
52 | 0 | std::unique_ptr<Echo> MakeEcho() { return std::make_unique<common::EchoImpl>(); } |
53 | | } // namespace interfaces |