Branch data Line data Source code
# 1 : : // Copyright (c) 2018-2020 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/handler.h> # 6 : : # 7 : : # 8 : : #include <boost/signals2/connection.hpp> # 9 : : #include <utility> # 10 : : # 11 : : namespace interfaces { # 12 : : namespace { # 13 : : # 14 : : class HandlerImpl : public Handler # 15 : : { # 16 : : public: # 17 : 0 : explicit HandlerImpl(boost::signals2::connection connection) : m_connection(std::move(connection)) {} # 18 : : # 19 : 0 : void disconnect() override { m_connection.disconnect(); } # 20 : : # 21 : : boost::signals2::scoped_connection m_connection; # 22 : : }; # 23 : : # 24 : : class CleanupHandler : public Handler # 25 : : { # 26 : : public: # 27 : 1 : explicit CleanupHandler(std::function<void()> cleanup) : m_cleanup(std::move(cleanup)) {} # 28 [ - + ]: 1 : ~CleanupHandler() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } # 29 [ # # ]: 0 : void disconnect() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } # 30 : : std::function<void()> m_cleanup; # 31 : : }; # 32 : : # 33 : : } // namespace # 34 : : # 35 : : std::unique_ptr<Handler> MakeHandler(boost::signals2::connection connection) # 36 : 0 : { # 37 : 0 : return std::make_unique<HandlerImpl>(std::move(connection)); # 38 : 0 : } # 39 : : # 40 : : std::unique_ptr<Handler> MakeHandler(std::function<void()> cleanup) # 41 : 1 : { # 42 : 1 : return std::make_unique<CleanupHandler>(std::move(cleanup)); # 43 : 1 : } # 44 : : # 45 : : } // namespace interfaces