mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 12:22:39 -03:00
Merge bitcoin/bitcoin#26298: refactor: Move src/interfaces/*.cpp files to libbitcoin_common.a
b19c4124b3
refactor: Rename ambiguous interfaces::MakeHandler functions (Ryan Ofsky)dd6e8bd71c
build: remove BOOST_CPPFLAGS from libbitcoin_util (fanquake)82e272a109
refactor: Move src/interfaces/*.cpp files to libbitcoin_common.a (Ryan Ofsky) Pull request description: These belong in `libbitcoin_common.a`, not `libbitcoin_util.a`, because they aren't general-purpose utilities, they just contain some common glue code that is used by both the node and the wallet. Another reason not to include these in `libbitcoin_util.a` is to prevent them from being used by the kernel library. Also rename ambiguous `MakeHandler` functions to `MakeCleanupHandler` and `MakeSignalHandler`. Cleanup function handler was introduced after boost signals handler, so original naming didn't make much sense. This just contains a move-only commit, and a rename commit. There are no actual code or behavior changes. This PR is an alternative to #26293, and solves the same issue of removing a boost dependency from the _util_ library. The advantages of this PR compared to #26293 are that it keeps the source directory structure more flat, and it avoids having to change #includes all over the codebase. ACKs for top commit: hebasto: ACKb19c4124b3
Tree-SHA512: b3a1d33eedceda7ad852c6d6f35700159d156d96071e59acae2bc325467fef81476f860a8855ea39cf3ea706a1df2a341f34fb2dcb032c31a3b0e9cf14103b6a
This commit is contained in:
commit
7d51560003
10 changed files with 88 additions and 116 deletions
|
@ -633,6 +633,7 @@ libbitcoin_common_a_SOURCES = \
|
|||
chainparams.cpp \
|
||||
coins.cpp \
|
||||
common/bloom.cpp \
|
||||
common/interfaces.cpp \
|
||||
common/run_command.cpp \
|
||||
compressor.cpp \
|
||||
core_read.cpp \
|
||||
|
@ -671,16 +672,13 @@ endif
|
|||
#
|
||||
|
||||
# util #
|
||||
libbitcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BOOST_CPPFLAGS)
|
||||
libbitcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
libbitcoin_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
libbitcoin_util_a_SOURCES = \
|
||||
support/lockedpool.cpp \
|
||||
chainparamsbase.cpp \
|
||||
clientversion.cpp \
|
||||
fs.cpp \
|
||||
interfaces/echo.cpp \
|
||||
interfaces/handler.cpp \
|
||||
interfaces/init.cpp \
|
||||
logging.cpp \
|
||||
random.cpp \
|
||||
randomenv.cpp \
|
||||
|
|
53
src/common/interfaces.cpp
Normal file
53
src/common/interfaces.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
// Copyright (c) 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 <interfaces/echo.h>
|
||||
#include <interfaces/handler.h>
|
||||
|
||||
#include <boost/signals2/connection.hpp>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
namespace common {
|
||||
namespace {
|
||||
class CleanupHandler : public interfaces::Handler
|
||||
{
|
||||
public:
|
||||
explicit CleanupHandler(std::function<void()> 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<void()> m_cleanup;
|
||||
};
|
||||
|
||||
class SignalHandler : public interfaces::Handler
|
||||
{
|
||||
public:
|
||||
explicit SignalHandler(boost::signals2::connection connection) : m_connection(std::move(connection)) {}
|
||||
|
||||
void disconnect() override { m_connection.disconnect(); }
|
||||
|
||||
boost::signals2::scoped_connection m_connection;
|
||||
};
|
||||
|
||||
class EchoImpl : public interfaces::Echo
|
||||
{
|
||||
public:
|
||||
std::string echo(const std::string& echo) override { return echo; }
|
||||
};
|
||||
} // namespace
|
||||
} // namespace common
|
||||
|
||||
namespace interfaces {
|
||||
std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup)
|
||||
{
|
||||
return std::make_unique<common::CleanupHandler>(std::move(cleanup));
|
||||
}
|
||||
|
||||
std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection)
|
||||
{
|
||||
return std::make_unique<common::SignalHandler>(std::move(connection));
|
||||
}
|
||||
|
||||
std::unique_ptr<Echo> MakeEcho() { return std::make_unique<common::EchoImpl>(); }
|
||||
} // namespace interfaces
|
|
@ -1,18 +0,0 @@
|
|||
// Copyright (c) 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 <interfaces/echo.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace interfaces {
|
||||
namespace {
|
||||
class EchoImpl : public Echo
|
||||
{
|
||||
public:
|
||||
std::string echo(const std::string& echo) override { return echo; }
|
||||
};
|
||||
} // namespace
|
||||
std::unique_ptr<Echo> MakeEcho() { return std::make_unique<EchoImpl>(); }
|
||||
} // namespace interfaces
|
|
@ -1,45 +0,0 @@
|
|||
// 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 <interfaces/handler.h>
|
||||
|
||||
|
||||
#include <boost/signals2/connection.hpp>
|
||||
#include <utility>
|
||||
|
||||
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<void()> 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<void()> m_cleanup;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<Handler> MakeHandler(boost::signals2::connection connection)
|
||||
{
|
||||
return std::make_unique<HandlerImpl>(std::move(connection));
|
||||
}
|
||||
|
||||
std::unique_ptr<Handler> MakeHandler(std::function<void()> cleanup)
|
||||
{
|
||||
return std::make_unique<CleanupHandler>(std::move(cleanup));
|
||||
}
|
||||
|
||||
} // namespace interfaces
|
|
@ -29,10 +29,10 @@ public:
|
|||
};
|
||||
|
||||
//! Return handler wrapping a boost signal connection.
|
||||
std::unique_ptr<Handler> MakeHandler(boost::signals2::connection connection);
|
||||
std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection);
|
||||
|
||||
//! Return handler wrapping a cleanup function.
|
||||
std::unique_ptr<Handler> MakeHandler(std::function<void()> cleanup);
|
||||
std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup);
|
||||
|
||||
} // namespace interfaces
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
// Copyright (c) 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 <interfaces/chain.h>
|
||||
#include <interfaces/echo.h>
|
||||
#include <interfaces/init.h>
|
||||
#include <interfaces/node.h>
|
||||
#include <interfaces/wallet.h>
|
||||
|
||||
namespace interfaces {
|
||||
std::unique_ptr<Node> Init::makeNode() { return {}; }
|
||||
std::unique_ptr<Chain> Init::makeChain() { return {}; }
|
||||
std::unique_ptr<WalletLoader> Init::makeWalletLoader(Chain& chain) { return {}; }
|
||||
std::unique_ptr<Echo> Init::makeEcho() { return {}; }
|
||||
Ipc* Init::ipc() { return nullptr; }
|
||||
} // namespace interfaces
|
|
@ -5,6 +5,11 @@
|
|||
#ifndef BITCOIN_INTERFACES_INIT_H
|
||||
#define BITCOIN_INTERFACES_INIT_H
|
||||
|
||||
#include <interfaces/chain.h>
|
||||
#include <interfaces/echo.h>
|
||||
#include <interfaces/node.h>
|
||||
#include <interfaces/wallet.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace node {
|
||||
|
@ -12,11 +17,7 @@ struct NodeContext;
|
|||
} // namespace node
|
||||
|
||||
namespace interfaces {
|
||||
class Chain;
|
||||
class Echo;
|
||||
class Ipc;
|
||||
class Node;
|
||||
class WalletLoader;
|
||||
|
||||
//! Initial interface created when a process is first started, and used to give
|
||||
//! and get access to other interfaces (Node, Chain, Wallet, etc).
|
||||
|
@ -29,11 +30,11 @@ class Init
|
|||
{
|
||||
public:
|
||||
virtual ~Init() = default;
|
||||
virtual std::unique_ptr<Node> makeNode();
|
||||
virtual std::unique_ptr<Chain> makeChain();
|
||||
virtual std::unique_ptr<WalletLoader> makeWalletLoader(Chain& chain);
|
||||
virtual std::unique_ptr<Echo> makeEcho();
|
||||
virtual Ipc* ipc();
|
||||
virtual std::unique_ptr<Node> makeNode() { return nullptr; }
|
||||
virtual std::unique_ptr<Chain> makeChain() { return nullptr; }
|
||||
virtual std::unique_ptr<WalletLoader> makeWalletLoader(Chain& chain) { return nullptr; }
|
||||
virtual std::unique_ptr<Echo> makeEcho() { return nullptr; }
|
||||
virtual Ipc* ipc() { return nullptr; }
|
||||
};
|
||||
|
||||
//! Return implementation of Init interface for the node process. If the argv
|
||||
|
|
|
@ -64,7 +64,7 @@ using interfaces::BlockTip;
|
|||
using interfaces::Chain;
|
||||
using interfaces::FoundBlock;
|
||||
using interfaces::Handler;
|
||||
using interfaces::MakeHandler;
|
||||
using interfaces::MakeSignalHandler;
|
||||
using interfaces::Node;
|
||||
using interfaces::WalletLoader;
|
||||
|
||||
|
@ -336,50 +336,50 @@ public:
|
|||
}
|
||||
std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.InitMessage_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.InitMessage_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.ThreadSafeMessageBox_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.ThreadSafeMessageBox_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleQuestion(QuestionFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.ThreadSafeQuestion_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.ThreadSafeQuestion_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.ShowProgress_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.ShowProgress_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.InitWallet_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.InitWallet_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.NotifyNumConnectionsChanged_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.NotifyNumConnectionsChanged_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.NotifyNetworkActiveChanged_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.NotifyNetworkActiveChanged_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.NotifyAlertChanged_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.NotifyAlertChanged_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.BannedListChanged_connect(fn));
|
||||
return MakeSignalHandler(::uiInterface.BannedListChanged_connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn) override
|
||||
{
|
||||
return MakeHandler(::uiInterface.NotifyBlockTip_connect([fn](SynchronizationState sync_state, const CBlockIndex* block) {
|
||||
return MakeSignalHandler(::uiInterface.NotifyBlockTip_connect([fn](SynchronizationState sync_state, const CBlockIndex* block) {
|
||||
fn(sync_state, BlockTip{block->nHeight, block->GetBlockTime(), block->GetBlockHash()},
|
||||
GuessVerificationProgress(Params().TxData(), block));
|
||||
}));
|
||||
}
|
||||
std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn) override
|
||||
{
|
||||
return MakeHandler(
|
||||
return MakeSignalHandler(
|
||||
::uiInterface.NotifyHeaderTip_connect([fn](SynchronizationState sync_state, int64_t height, int64_t timestamp, bool presync) {
|
||||
fn(sync_state, BlockTip{(int)height, timestamp, uint256{}}, presync);
|
||||
}));
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
using interfaces::Chain;
|
||||
using interfaces::FoundBlock;
|
||||
using interfaces::Handler;
|
||||
using interfaces::MakeHandler;
|
||||
using interfaces::MakeSignalHandler;
|
||||
using interfaces::Wallet;
|
||||
using interfaces::WalletAddress;
|
||||
using interfaces::WalletBalances;
|
||||
|
@ -486,34 +486,34 @@ public:
|
|||
bool isLegacy() override { return m_wallet->IsLegacy(); }
|
||||
std::unique_ptr<Handler> handleUnload(UnloadFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyUnload.connect(fn));
|
||||
return MakeSignalHandler(m_wallet->NotifyUnload.connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->ShowProgress.connect(fn));
|
||||
return MakeSignalHandler(m_wallet->ShowProgress.connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleStatusChanged(StatusChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyStatusChanged.connect([fn](CWallet*) { fn(); }));
|
||||
return MakeSignalHandler(m_wallet->NotifyStatusChanged.connect([fn](CWallet*) { fn(); }));
|
||||
}
|
||||
std::unique_ptr<Handler> handleAddressBookChanged(AddressBookChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyAddressBookChanged.connect(
|
||||
return MakeSignalHandler(m_wallet->NotifyAddressBookChanged.connect(
|
||||
[fn](const CTxDestination& address, const std::string& label, bool is_mine,
|
||||
const std::string& purpose, ChangeType status) { fn(address, label, is_mine, purpose, status); }));
|
||||
}
|
||||
std::unique_ptr<Handler> handleTransactionChanged(TransactionChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyTransactionChanged.connect(
|
||||
return MakeSignalHandler(m_wallet->NotifyTransactionChanged.connect(
|
||||
[fn](const uint256& txid, ChangeType status) { fn(txid, status); }));
|
||||
}
|
||||
std::unique_ptr<Handler> handleWatchOnlyChanged(WatchOnlyChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyWatchonlyChanged.connect(fn));
|
||||
return MakeSignalHandler(m_wallet->NotifyWatchonlyChanged.connect(fn));
|
||||
}
|
||||
std::unique_ptr<Handler> handleCanGetAddressesChanged(CanGetAddressesChangedFn fn) override
|
||||
{
|
||||
return MakeHandler(m_wallet->NotifyCanGetAddressesChanged.connect(fn));
|
||||
return MakeSignalHandler(m_wallet->NotifyCanGetAddressesChanged.connect(fn));
|
||||
}
|
||||
CWallet* wallet() override { return m_wallet.get(); }
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ std::unique_ptr<interfaces::Handler> HandleLoadWallet(WalletContext& context, Lo
|
|||
{
|
||||
LOCK(context.wallets_mutex);
|
||||
auto it = context.wallet_load_fns.emplace(context.wallet_load_fns.end(), std::move(load_wallet));
|
||||
return interfaces::MakeHandler([&context, it] { LOCK(context.wallets_mutex); context.wallet_load_fns.erase(it); });
|
||||
return interfaces::MakeCleanupHandler([&context, it] { LOCK(context.wallets_mutex); context.wallet_load_fns.erase(it); });
|
||||
}
|
||||
|
||||
void NotifyWalletLoaded(WalletContext& context, const std::shared_ptr<CWallet>& wallet)
|
||||
|
|
Loading…
Reference in a new issue