// Copyright (c) 2018-2021 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include namespace interfaces { namespace { class HandlerImpl : public Handler { public: explicit HandlerImpl(boost::signals2::connection connection) : m_connection(std::move(connection)) {} void disconnect() override { m_connection.disconnect(); } boost::signals2::scoped_connection m_connection; }; class CleanupHandler : public Handler { public: explicit CleanupHandler(std::function cleanup) : m_cleanup(std::move(cleanup)) {} ~CleanupHandler() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } void disconnect() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; } std::function m_cleanup; }; } // namespace std::unique_ptr MakeHandler(boost::signals2::connection connection) { return std::make_unique(std::move(connection)); } std::unique_ptr MakeHandler(std::function cleanup) { return std::make_unique(std::move(cleanup)); } } // namespace interfaces