Skip to content

Commit

Permalink
Change boost classes to std classes (#268)
Browse files Browse the repository at this point in the history
* replace boost::bind with td::bind and fix validation interface compilation

* remove boost::chrono

* change boost::variant to std::variant

* Revert "remove boost::chrono"

This reverts commit 434d8d7.
  • Loading branch information
Naviabheeman authored Jun 20, 2023
1 parent 74616f1 commit 99471fd
Show file tree
Hide file tree
Showing 42 changed files with 189 additions and 206 deletions.
2 changes: 1 addition & 1 deletion src/bench/block_assemble.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ static void AssembleBlock(benchmark::State& state)
::pcoinsdbview.reset(new CCoinsViewDB(1 << 23, true));
::pcoinsTip.reset(new CCoinsViewCache(pcoinsdbview.get()));

thread_group.create_thread(boost::bind(&CScheduler::serviceQueue, &scheduler));
thread_group.create_thread(std::bind(&CScheduler::serviceQueue, &scheduler));
GetMainSignals().RegisterBackgroundSignalScheduler(scheduler);
LoadGenesisBlock();
CValidationState state;
Expand Down
2 changes: 1 addition & 1 deletion src/federationparams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ bool CFederationParams::ReadGenesisBlock(std::string genesisHex)
switch(genesis.xfield.xfieldType)
{
case TAPYRUS_XFIELDTYPES::AGGPUBKEY: {
std::vector<unsigned char>* pubkey = &boost::get<XFieldAggPubKey>(genesis.xfield.xfieldValue).data;
std::vector<unsigned char>* pubkey = &std::get<XFieldAggPubKey>(genesis.xfield.xfieldValue).data;
if(!pubkey->size())
throw std::runtime_error("Aggregate Public Key for Signed Block is empty");

Expand Down
7 changes: 3 additions & 4 deletions src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/bind.hpp>
#include <boost/interprocess/sync/file_lock.hpp>
#include <boost/thread.hpp>

Expand Down Expand Up @@ -1236,8 +1235,8 @@ bool AppInitMain()
}

// Start the lightweight task scheduler thread
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
CScheduler::Function serviceLoop = std::bind(&CScheduler::serviceQueue, &scheduler);
threadGroup.create_thread(std::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));

// Gather some entropy once per minute.
scheduler.scheduleEvery([]{
Expand Down Expand Up @@ -1635,7 +1634,7 @@ bool AppInitMain()
vImportFiles.push_back(strFile);
}

threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles, fReloadxfield));
threadGroup.create_thread(std::bind(&ThreadImport, vImportFiles, fReloadxfield));

// Wait for genesis block to be processed
{
Expand Down
7 changes: 3 additions & 4 deletions src/key_io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
#include <script/script.h>
#include <utilstrencodings.h>

#include <boost/variant/apply_visitor.hpp>
#include <boost/variant/static_visitor.hpp>
#include <variant>

#include <assert.h>
#include <string.h>
Expand All @@ -20,7 +19,7 @@

namespace
{
class DestinationEncoder : public boost::static_visitor<std::string>
class DestinationEncoder
{
private:
const CChainParams& m_params;
Expand Down Expand Up @@ -196,7 +195,7 @@ std::string EncodeExtKey(const CExtKey& key)

std::string EncodeDestination(const CTxDestination& dest)
{
return boost::apply_visitor(DestinationEncoder(Params()), dest);
return std::visit(DestinationEncoder(Params()), dest);
}

CTxDestination DecodeDestination(const std::string& str)
Expand Down
2 changes: 1 addition & 1 deletion src/keystore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ CKeyID GetKeyForDestination(const CKeyStore& store, const CTxDestination& dest)
{
// Only supports destinations which map to single public keys, i.e. P2PKH,
// P2WPKH, and P2SH-P2WPKH.
if (auto id = boost::get<CKeyID>(&dest)) {
if (auto id = std::get_if<CKeyID>(&dest)) {
return *id;
}
return CKeyID();
Expand Down
13 changes: 7 additions & 6 deletions src/primitives/xfield.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <primitives/xfield.h>
#include <tinyformat.h>
#include <utilstrencodings.h>
#include <variant>

inline std::string XFieldAggPubKey::ToString() const {
return HexStr(data);
Expand All @@ -16,7 +17,7 @@ inline std::string XFieldMaxBlockSize::ToString() const {

template <typename T>
bool GetXFieldValueFrom(XFieldData& xfieldValue, T& value) {
value = boost::get<T>(xfieldValue);
value = std::get<T>(xfieldValue);
return std::atoi(value.BLOCKTREE_DB_KEY) == GetXFieldTypeFrom(xfieldValue);
}

Expand All @@ -29,17 +30,17 @@ std::string CXField::ToString() const {

bool CXField::IsValid() const {
return ::IsValid(this->xfieldType)
&& boost::apply_visitor(XFieldValidityVisitor(), this->xfieldValue)
&& std::visit(XFieldValidityVisitor(), this->xfieldValue)
&& GetXFieldTypeFrom(this->xfieldValue) == this->xfieldType;
}

std::string XFieldDataToString(const XFieldData &xfieldValue) {
switch(GetXFieldTypeFrom(xfieldValue))
{
case TAPYRUS_XFIELDTYPES::AGGPUBKEY:
return boost::get<XFieldAggPubKey>(xfieldValue).ToString();
return std::get<XFieldAggPubKey>(xfieldValue).ToString();
case TAPYRUS_XFIELDTYPES::MAXBLOCKSIZE:
return boost::get<XFieldMaxBlockSize>(xfieldValue).ToString();
return std::get<XFieldMaxBlockSize>(xfieldValue).ToString();
case TAPYRUS_XFIELDTYPES::NONE:
default:
return "";
Expand All @@ -51,9 +52,9 @@ char GetXFieldDBKey(const XFieldData& xfieldValue) {
switch(GetXFieldTypeFrom(xfieldValue))
{
case TAPYRUS_XFIELDTYPES::AGGPUBKEY:
return boost::get<XFieldAggPubKey>(xfieldValue).BLOCKTREE_DB_KEY;
return std::get<XFieldAggPubKey>(xfieldValue).BLOCKTREE_DB_KEY;
case TAPYRUS_XFIELDTYPES::MAXBLOCKSIZE:
return boost::get<XFieldMaxBlockSize>(xfieldValue).BLOCKTREE_DB_KEY;
return std::get<XFieldMaxBlockSize>(xfieldValue).BLOCKTREE_DB_KEY;
case TAPYRUS_XFIELDTYPES::NONE:
default:
return '\0';
Expand Down
12 changes: 6 additions & 6 deletions src/primitives/xfield.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <uint256.h>
#include <key.h>

#include <boost/variant.hpp>
#include <variant>
#include <type_traits>
#include <typeinfo>

Expand Down Expand Up @@ -122,7 +122,7 @@ class XFieldMaxBlockSize {
/*
* union of above classes to represent xfieldValue.
*/
typedef boost::variant<
typedef std::variant<
XFieldEmpty,
XFieldAggPubKey,
XFieldMaxBlockSize> XFieldData;
Expand All @@ -131,7 +131,7 @@ typedef boost::variant<
* This method defines the association between XFieldData and TAPYRUS_XFIELDTYPES
*/
inline TAPYRUS_XFIELDTYPES GetXFieldTypeFrom(XFieldData xfieldDataIn) {
return TAPYRUS_XFIELDTYPES(xfieldDataIn.which());
return TAPYRUS_XFIELDTYPES(xfieldDataIn.index());
}

//Exception to identify xfield composition problems
Expand Down Expand Up @@ -223,9 +223,9 @@ struct CXField {
switch(xfieldType)
{
case TAPYRUS_XFIELDTYPES::AGGPUBKEY:
::Serialize(s, boost::get<XFieldAggPubKey>(xfieldValue)); break;
::Serialize(s, std::get<XFieldAggPubKey>(xfieldValue)); break;
case TAPYRUS_XFIELDTYPES::MAXBLOCKSIZE:
::Serialize(s, boost::get<XFieldMaxBlockSize>(xfieldValue)); break;
::Serialize(s, std::get<XFieldMaxBlockSize>(xfieldValue)); break;
case TAPYRUS_XFIELDTYPES::NONE:
default:
break;
Expand Down Expand Up @@ -269,7 +269,7 @@ struct CXField {
};


class XFieldValidityVisitor : public boost::static_visitor< bool >
class XFieldValidityVisitor
{
public:

Expand Down
2 changes: 1 addition & 1 deletion src/qt/addresstablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
} else if(index.column() == Address) {
CTxDestination newAddress = DecodeDestination(value.toString().toStdString());
// Refuse to set invalid address, set error status and return false
if(boost::get<CNoDestination>(&newAddress))
if(std::get_if<CNoDestination>(&newAddress))
{
editStatus = INVALID_ADDRESS;
return false;
Expand Down
14 changes: 7 additions & 7 deletions src/qt/clientmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -247,13 +247,13 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, int heig
void ClientModel::subscribeToCoreSignals()
{
// Connect signals to client
m_handler_show_progress = m_node.handleShowProgress(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
m_handler_notify_num_connections_changed = m_node.handleNotifyNumConnectionsChanged(boost::bind(NotifyNumConnectionsChanged, this, boost::placeholders::_1));
m_handler_notify_network_active_changed = m_node.handleNotifyNetworkActiveChanged(boost::bind(NotifyNetworkActiveChanged, this, boost::placeholders::_1));
m_handler_notify_alert_changed = m_node.handleNotifyAlertChanged(boost::bind(NotifyAlertChanged, this));
m_handler_banned_list_changed = m_node.handleBannedListChanged(boost::bind(BannedListChanged, this));
m_handler_notify_block_tip = m_node.handleNotifyBlockTip(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, false));
m_handler_notify_header_tip = m_node.handleNotifyHeaderTip(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, true));
m_handler_show_progress = m_node.handleShowProgress(std::bind(ShowProgress, this, std::placeholders::_1, std::placeholders::_2));
m_handler_notify_num_connections_changed = m_node.handleNotifyNumConnectionsChanged(std::bind(NotifyNumConnectionsChanged, this, std::placeholders::_1));
m_handler_notify_network_active_changed = m_node.handleNotifyNetworkActiveChanged(std::bind(NotifyNetworkActiveChanged, this, std::placeholders::_1));
m_handler_notify_alert_changed = m_node.handleNotifyAlertChanged(std::bind(NotifyAlertChanged, this));
m_handler_banned_list_changed = m_node.handleBannedListChanged(std::bind(BannedListChanged, this));
m_handler_notify_block_tip = m_node.handleNotifyBlockTip(std::bind(BlockTipChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, false));
m_handler_notify_header_tip = m_node.handleNotifyHeaderTip(std::bind(BlockTipChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, true));
}

void ClientModel::unsubscribeFromCoreSignals()
Expand Down
4 changes: 2 additions & 2 deletions src/qt/coincontroldialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -466,8 +466,8 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
if(ExtractDestination(out.txout.scriptPubKey, address))
{
CPubKey pubkey;
CKeyID *keyid = boost::get<CKeyID>(&address);
if (keyid && model->wallet().getPubKey(*keyid, pubkey))
CKeyID &keyid = std::get<CKeyID>(address);
if (model->wallet().getPubKey(keyid, pubkey))
{
nBytesInputs += (pubkey.IsCompressed() ? 148 : 180);
}
Expand Down
5 changes: 3 additions & 2 deletions src/qt/signverifymessagedialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ void SignVerifyMessageDialog::on_signMessageButton_SM_clicked()
ui->statusLabel_SM->setText(tr("The entered address is invalid.") + QString(" ") + tr("Please check the address and try again."));
return;
}
const CKeyID* keyID = boost::get<CKeyID>(&destination);
const CKeyID* keyID = std::get_if<CKeyID>(&destination);
if (!keyID) {
ui->addressIn_SM->setValid(false);
ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }");
Expand Down Expand Up @@ -198,7 +198,8 @@ void SignVerifyMessageDialog::on_verifyMessageButton_VM_clicked()
ui->statusLabel_VM->setText(tr("The entered address is invalid.") + QString(" ") + tr("Please check the address and try again."));
return;
}
if (!boost::get<CKeyID>(&destination)) {
CKeyID* pdest = std::get_if<CKeyID>(&destination);
if (!pdest) {
ui->addressIn_VM->setValid(false);
ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }");
ui->statusLabel_VM->setText(tr("The entered address does not refer to a key.") + QString(" ") + tr("Please check the address and try again."));
Expand Down
6 changes: 3 additions & 3 deletions src/qt/splashscreen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,16 +178,16 @@ static void ShowProgress(SplashScreen *splash, const std::string &title, int nPr
#ifdef ENABLE_WALLET
void SplashScreen::ConnectWallet(std::unique_ptr<interfaces::Wallet> wallet)
{
m_connected_wallet_handlers.emplace_back(wallet->handleShowProgress(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2, false)));
m_connected_wallet_handlers.emplace_back(wallet->handleShowProgress(std::bind(ShowProgress, this, std::placeholders::_1, std::placeholders::_2, false)));
m_connected_wallets.emplace_back(std::move(wallet));
}
#endif

void SplashScreen::subscribeToCoreSignals()
{
// Connect signals to client
m_handler_init_message = m_node.handleInitMessage(boost::bind(InitMessage, this, boost::placeholders::_1));
m_handler_show_progress = m_node.handleShowProgress(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
m_handler_init_message = m_node.handleInitMessage(std::bind(InitMessage, this, std::placeholders::_1));
m_handler_show_progress = m_node.handleShowProgress(std::bind(ShowProgress, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
#ifdef ENABLE_WALLET
m_handler_load_wallet = m_node.handleLoadWallet([this](std::unique_ptr<interfaces::Wallet> wallet) { ConnectWallet(std::move(wallet)); });
#endif
Expand Down
4 changes: 2 additions & 2 deletions src/qt/tapyrusgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1221,8 +1221,8 @@ static bool ThreadSafeMessageBox(TapyrusGUI *gui, const std::string& message, co
void TapyrusGUI::subscribeToCoreSignals()
{
// Connect signals to client
m_handler_message_box = m_node.handleMessageBox(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
m_handler_question = m_node.handleQuestion(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_3, boost::placeholders::_4));
m_handler_message_box = m_node.handleMessageBox(std::bind(ThreadSafeMessageBox, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
m_handler_question = m_node.handleQuestion(std::bind(ThreadSafeMessageBox, this, std::placeholders::_1, std::placeholders::_3, std::placeholders::_4));
}

void TapyrusGUI::unsubscribeFromCoreSignals()
Expand Down
2 changes: 1 addition & 1 deletion src/qt/transactionrecord.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const interface
continue;
}

if (!boost::get<CNoDestination>(&wtx.txout_address[nOut]))
if (!std::get_if<CNoDestination>(&wtx.txout_address[nOut]))
{
// Sent to Bitcoin Address
sub.type = TransactionRecord::SendToAddress;
Expand Down
4 changes: 2 additions & 2 deletions src/qt/transactiontablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,8 @@ static void ShowProgress(TransactionTableModel *ttm, const std::string &title, i
void TransactionTableModel::subscribeToCoreSignals()
{
// Connect signals to wallet
m_handler_transaction_changed = walletModel->wallet().handleTransactionChanged(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2));
m_handler_show_progress = walletModel->wallet().handleShowProgress(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
m_handler_transaction_changed = walletModel->wallet().handleTransactionChanged(std::bind(NotifyTransactionChanged, this, std::placeholders::_1, std::placeholders::_2));
m_handler_show_progress = walletModel->wallet().handleShowProgress(std::bind(ShowProgress, this, std::placeholders::_1, std::placeholders::_2));
}

void TransactionTableModel::unsubscribeFromCoreSignals()
Expand Down
12 changes: 6 additions & 6 deletions src/qt/walletmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,12 +387,12 @@ static void NotifyWatchonlyChanged(WalletModel *walletmodel, bool fHaveWatchonly
void WalletModel::subscribeToCoreSignals()
{
// Connect signals to wallet
m_handler_unload = m_wallet->handleUnload(boost::bind(&NotifyUnload, this));
m_handler_status_changed = m_wallet->handleStatusChanged(boost::bind(&NotifyKeyStoreStatusChanged, this));
m_handler_address_book_changed = m_wallet->handleAddressBookChanged(boost::bind(NotifyAddressBookChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5));
m_handler_transaction_changed = m_wallet->handleTransactionChanged(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2));
m_handler_show_progress = m_wallet->handleShowProgress(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
m_handler_watch_only_changed = m_wallet->handleWatchOnlyChanged(boost::bind(NotifyWatchonlyChanged, this, boost::placeholders::_1));
m_handler_unload = m_wallet->handleUnload(std::bind(&NotifyUnload, this));
m_handler_status_changed = m_wallet->handleStatusChanged(std::bind(&NotifyKeyStoreStatusChanged, this));
m_handler_address_book_changed = m_wallet->handleAddressBookChanged(std::bind(NotifyAddressBookChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5));
m_handler_transaction_changed = m_wallet->handleTransactionChanged(std::bind(NotifyTransactionChanged, this, std::placeholders::_1, std::placeholders::_2));
m_handler_show_progress = m_wallet->handleShowProgress(std::bind(ShowProgress, this, std::placeholders::_1, std::placeholders::_2));
m_handler_watch_only_changed = m_wallet->handleWatchOnlyChanged(std::bind(NotifyWatchonlyChanged, this, std::placeholders::_1));
}

void WalletModel::unsubscribeFromCoreSignals()
Expand Down
2 changes: 1 addition & 1 deletion src/rpc/mining.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ UniValue getnewblock(const JSONRPCRequest& request)
if(!xfieldString.size() || !ParseUInt32(xfieldString, &val))
throw JSONRPCError(RPC_INVALID_PARAMS, "xfield max block size was invalid. It is expected to be <xfield_type:new_xfield_value>.");
xfield.xfieldValue = XFieldMaxBlockSize(val);
if(!boost::apply_visitor(XFieldValidityVisitor(), xfield.xfieldValue))
if(!std::visit(XFieldValidityVisitor(), xfield.xfieldValue))
throw JSONRPCError(RPC_INVALID_PARAMS, "xfield max block size was invalid. It is expected to be a positive quantity between 1000 and 4294967295.");
xfield.xfieldType = TAPYRUS_XFIELDTYPES::MAXBLOCKSIZE;
}
Expand Down
2 changes: 1 addition & 1 deletion src/rpc/misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ static UniValue verifymessage(const JSONRPCRequest& request)
throw JSONRPCError(RPC_TYPE_ERROR, "Invalid address");
}

const CKeyID *keyID = boost::get<CKeyID>(&destination);
const CKeyID *keyID = std::get_if<CKeyID>(&destination);
if (!keyID) {
throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to key");
}
Expand Down
8 changes: 4 additions & 4 deletions src/rpc/rawtransaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -427,10 +427,10 @@ CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniVal
throw JSONRPCError(RPC_INVALID_PARAMETER, std::string("Invalid parameter, duplicated address: ") + name_);
}
ColorIdentifier colorId;
if(destination.which() == 3)
colorId = boost::get<CColorKeyID>(destination).color;
else if(destination.which() == 4)
colorId = boost::get<CColorScriptID>(destination).color;
if(destination.index() == 3)
colorId = std::get<CColorKeyID>(destination).color;
else if(destination.index() == 4)
colorId = std::get<CColorScriptID>(destination).color;

CScript scriptPubKey = GetScriptForDestination(destination);
CAmount nAmount = (colorId.type == TokenTypes::NONE ? AmountFromValue(outputs[name_]) : TokenAmountFromValue(outputs[name_]));
Expand Down
7 changes: 3 additions & 4 deletions src/rpc/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#include <util.h>
#include <utilstrencodings.h>

#include <boost/bind.hpp>
#include <boost/signals2/signal.hpp>
#include <boost/algorithm/string/case_conv.hpp> // for to_upper()
#include <boost/algorithm/string/classification.hpp>
Expand Down Expand Up @@ -520,9 +519,9 @@ std::vector<std::string> CRPCTable::listCommands() const
std::vector<std::string> commandList;
typedef std::map<std::string, const CRPCCommand*> commandMap;

std::transform( mapCommands.begin(), mapCommands.end(),
std::back_inserter(commandList),
boost::bind(&commandMap::value_type::first, boost::placeholders::_1) );
for (const auto& i : mapCommands)
commandList.emplace_back(i.first);

return commandList;
}

Expand Down
Loading

0 comments on commit 99471fd

Please sign in to comment.