Skip to content

Commit 4dfb3f1

Browse files
committed
refactor: replace boost::variant with std::variant
1 parent dcd5a9d commit 4dfb3f1

18 files changed

+91
-90
lines changed

src/base58.h

+6-4
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
#ifndef BITCOIN_BASE58_H
1616
#define BITCOIN_BASE58_H
1717

18-
#include <string>
19-
#include <vector>
2018
#include "bignum.h"
2119
#include "key.h"
2220
#include "script.h"
2321

22+
#include <string>
23+
#include <variant>
24+
#include <vector>
25+
2426
static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
2527

2628
// Encode a byte sequence as a base58-encoded string
@@ -260,7 +262,7 @@ class CBase58Data
260262
* The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script.
261263
*/
262264
class CBitcoinAddress;
263-
class CBitcoinAddressVisitor : public boost::static_visitor<bool>
265+
class CBitcoinAddressVisitor
264266
{
265267
private:
266268
CBitcoinAddress *addr;
@@ -295,7 +297,7 @@ class CBitcoinAddress : public CBase58Data
295297

296298
bool Set(const CTxDestination &dest)
297299
{
298-
return boost::apply_visitor(CBitcoinAddressVisitor(this), dest);
300+
return std::visit(CBitcoinAddressVisitor(this), dest);
299301
}
300302

301303
bool IsValid() const

src/gridcoin/cpid.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#include "util.h"
77

88
#include <algorithm>
9-
#include <boost/variant/apply_visitor.hpp>
109
#include <openssl/md5.h>
1110

1211
using namespace GRC;
@@ -15,7 +14,7 @@ namespace {
1514
//!
1615
//! \brief Gets the string representation of a mining ID object.
1716
//!
18-
struct MiningIdToStringVisitor : boost::static_visitor<std::string>
17+
struct MiningIdToStringVisitor
1918
{
2019
//!
2120
//! \brief Call the mining ID variant type's \c ToString() method directly.
@@ -117,7 +116,7 @@ MiningId MiningId::Parse(const std::string& input)
117116

118117
std::string MiningId::ToString() const
119118
{
120-
return boost::apply_visitor(MiningIdToStringVisitor(), m_variant);
119+
return std::visit(MiningIdToStringVisitor(), m_variant);
121120
}
122121

123122
// -----------------------------------------------------------------------------

src/gridcoin/cpid.h

+9-10
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88

99
#include <array>
1010
#include <boost/optional.hpp>
11-
#include <boost/variant/get.hpp>
12-
#include <boost/variant/variant.hpp>
1311
#include <string>
1412
#include <vector>
13+
#include <variant>
1514

1615
namespace GRC {
1716
//!
@@ -299,12 +298,12 @@ class MiningId
299298
//!
300299
bool operator==(const MiningId& other) const
301300
{
302-
if (m_variant.which() != other.m_variant.which()) {
301+
if (m_variant.index() != other.m_variant.index()) {
303302
return false;
304303
}
305304

306305
if (Which() == Kind::CPID) {
307-
return *this == boost::get<Cpid>(other.m_variant);
306+
return *this == std::get<Cpid>(other.m_variant);
308307
}
309308

310309
return true;
@@ -333,7 +332,7 @@ class MiningId
333332
bool operator==(const Cpid& other) const
334333
{
335334
return Which() == Kind::CPID
336-
&& boost::get<Cpid>(m_variant) == other;
335+
&& std::get<Cpid>(m_variant) == other;
337336
}
338337

339338
//!
@@ -356,7 +355,7 @@ class MiningId
356355
//!
357356
Kind Which() const
358357
{
359-
return static_cast<Kind>(m_variant.which());
358+
return static_cast<Kind>(m_variant.index());
360359
}
361360

362361
//!
@@ -381,7 +380,7 @@ class MiningId
381380
return boost::none;
382381
}
383382

384-
return boost::get<Cpid>(m_variant);
383+
return std::get<Cpid>(m_variant);
385384
}
386385

387386
//!
@@ -400,12 +399,12 @@ class MiningId
400399
template<typename Stream>
401400
void Serialize(Stream& stream) const
402401
{
403-
unsigned char kind = m_variant.which();
402+
unsigned char kind = m_variant.index();
404403

405404
::Serialize(stream, kind);
406405

407406
if (static_cast<Kind>(kind) == Kind::CPID) {
408-
boost::get<Cpid>(m_variant).Serialize(stream);
407+
std::get<Cpid>(m_variant).Serialize(stream);
409408
}
410409
}
411410

@@ -443,7 +442,7 @@ class MiningId
443442
//!
444443
//! \brief Stores the various states that a mining ID may exist in.
445444
//!
446-
boost::variant<Invalid, Investor, Cpid> m_variant;
445+
std::variant<Invalid, Investor, Cpid> m_variant;
447446
}; // MiningId
448447
} // namespace GRC
449448

src/gridcoin/researcher.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -1048,26 +1048,26 @@ AdvertiseBeaconResult::AdvertiseBeaconResult(const BeaconError error)
10481048

10491049
CPubKey* AdvertiseBeaconResult::TryPublicKey()
10501050
{
1051-
if (m_result.which() == 0) {
1052-
return &boost::get<CPubKey>(m_result);
1051+
if (m_result.index() == 0) {
1052+
return &std::get<CPubKey>(m_result);
10531053
}
10541054

10551055
return nullptr;
10561056
}
10571057

10581058
const CPubKey* AdvertiseBeaconResult::TryPublicKey() const
10591059
{
1060-
if (m_result.which() == 0) {
1061-
return &boost::get<CPubKey>(m_result);
1060+
if (m_result.index() == 0) {
1061+
return &std::get<CPubKey>(m_result);
10621062
}
10631063

10641064
return nullptr;
10651065
}
10661066

10671067
BeaconError AdvertiseBeaconResult::Error() const
10681068
{
1069-
if (m_result.which() > 0) {
1070-
return boost::get<BeaconError>(m_result);
1069+
if (m_result.index() > 0) {
1070+
return std::get<BeaconError>(m_result);
10711071
}
10721072

10731073
return BeaconError::NONE;

src/gridcoin/researcher.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
#include "key.h"
99
#include "gridcoin/cpid.h"
1010

11-
#include <boost/variant/get.hpp>
12-
#include <boost/variant/variant.hpp>
1311
#include <map>
1412
#include <memory>
1513
#include <string>
@@ -309,7 +307,7 @@ class AdvertiseBeaconResult
309307
//! \brief Contains the beacon public key if advertisement succeeded or
310308
//! the error result if it did not.
311309
//!
312-
boost::variant<CPubKey, BeaconError> m_result;
310+
std::variant<CPubKey, BeaconError> m_result;
313311
};
314312

315313
//!

src/gridcoin/superblock.cpp

+15-16
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include "util.h"
1212
#include "util/reverse_iterator.h"
1313

14-
#include <boost/variant/apply_visitor.hpp>
1514
#include <openssl/md5.h>
1615

1716
using namespace GRC;
@@ -475,7 +474,7 @@ class LegacySuperblockParser
475474
//!
476475
//! \brief Gets the string representation of a quorum hash object.
477476
//!
478-
struct QuorumHashToStringVisitor : boost::static_visitor<std::string>
477+
struct QuorumHashToStringVisitor
479478
{
480479
//!
481480
//! \brief Get the string representation of an invalid or empty quorum hash.
@@ -1016,7 +1015,7 @@ QuorumHash::QuorumHash(const std::vector<unsigned char>& bytes) : QuorumHash()
10161015
m_hash = uint256(bytes);
10171016
} else if (bytes.size() == sizeof(Md5Sum)) {
10181017
m_hash = Md5Sum();
1019-
std::copy(bytes.begin(), bytes.end(), boost::get<Md5Sum>(m_hash).begin());
1018+
std::copy(bytes.begin(), bytes.end(), std::get<Md5Sum>(m_hash).begin());
10201019
}
10211020
}
10221021

@@ -1081,7 +1080,7 @@ QuorumHash QuorumHash::Parse(const std::string& hex)
10811080

10821081
bool QuorumHash::operator==(const QuorumHash& other) const
10831082
{
1084-
if (m_hash.which() != other.m_hash.which()) {
1083+
if (m_hash.index() != other.m_hash.index()) {
10851084
return false;
10861085
}
10871086

@@ -1090,12 +1089,12 @@ bool QuorumHash::operator==(const QuorumHash& other) const
10901089
return true;
10911090

10921091
case Kind::SHA256:
1093-
return boost::get<uint256>(m_hash)
1094-
== boost::get<uint256>(other.m_hash);
1092+
return std::get<uint256>(m_hash)
1093+
== std::get<uint256>(other.m_hash);
10951094

10961095
case Kind::MD5:
1097-
return boost::get<Md5Sum>(m_hash)
1098-
== boost::get<Md5Sum>(other.m_hash);
1096+
return std::get<Md5Sum>(m_hash)
1097+
== std::get<Md5Sum>(other.m_hash);
10991098
}
11001099

11011100
return false;
@@ -1109,7 +1108,7 @@ bool QuorumHash::operator!=(const QuorumHash& other) const
11091108
bool QuorumHash::operator==(const uint256& other) const
11101109
{
11111110
return Which() == Kind::SHA256
1112-
&& boost::get<uint256>(m_hash) == other;
1111+
&& std::get<uint256>(m_hash) == other;
11131112
}
11141113

11151114
bool QuorumHash::operator!=(const uint256& other) const
@@ -1125,13 +1124,13 @@ bool QuorumHash::operator==(const std::string& other) const
11251124

11261125
case Kind::SHA256:
11271126
return other.size() == sizeof(uint256) * 2
1128-
&& boost::get<uint256>(m_hash) == uint256S(other);
1127+
&& std::get<uint256>(m_hash) == uint256S(other);
11291128

11301129
case Kind::MD5:
11311130
return other.size() == sizeof(Md5Sum) * 2
11321131
&& std::equal(
1133-
boost::get<Md5Sum>(m_hash).begin(),
1134-
boost::get<Md5Sum>(m_hash).end(),
1132+
std::get<Md5Sum>(m_hash).begin(),
1133+
std::get<Md5Sum>(m_hash).end(),
11351134
ParseHex(other).begin());
11361135
}
11371136

@@ -1145,7 +1144,7 @@ bool QuorumHash::operator!=(const std::string&other) const
11451144

11461145
QuorumHash::Kind QuorumHash::Which() const
11471146
{
1148-
return static_cast<Kind>(m_hash.which());
1147+
return static_cast<Kind>(m_hash.index());
11491148
}
11501149

11511150
bool QuorumHash::Valid() const
@@ -1159,15 +1158,15 @@ const unsigned char* QuorumHash::Raw() const
11591158
case Kind::INVALID:
11601159
return nullptr;
11611160
case Kind::SHA256:
1162-
return boost::get<uint256>(m_hash).begin();
1161+
return std::get<uint256>(m_hash).begin();
11631162
case Kind::MD5:
1164-
return boost::get<Md5Sum>(m_hash).data();
1163+
return std::get<Md5Sum>(m_hash).data();
11651164
}
11661165

11671166
return nullptr;
11681167
}
11691168

11701169
std::string QuorumHash::ToString() const
11711170
{
1172-
return boost::apply_visitor(QuorumHashToStringVisitor(), m_hash);
1171+
return std::visit(QuorumHashToStringVisitor(), m_hash);
11731172
}

src/gridcoin/superblock.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include "uint256.h"
1212

1313
#include <boost/optional.hpp>
14-
#include <boost/variant/variant.hpp>
1514
#include <iterator>
1615
#include <memory>
1716
#include <string>
@@ -171,7 +170,7 @@ class QuorumHash
171170
template<typename Stream>
172171
void Serialize(Stream& stream) const
173172
{
174-
unsigned char kind = m_hash.which();
173+
unsigned char kind = m_hash.index();
175174

176175
::Serialize(stream, kind);
177176

@@ -180,11 +179,11 @@ class QuorumHash
180179
break; // Suppress warning.
181180

182181
case Kind::SHA256:
183-
boost::get<uint256>(m_hash).Serialize(stream);
182+
std::get<uint256>(m_hash).Serialize(stream);
184183
break;
185184

186185
case Kind::MD5: {
187-
const Md5Sum& hash = boost::get<Md5Sum>(m_hash);
186+
const Md5Sum& hash = std::get<Md5Sum>(m_hash);
188187

189188
stream.write(CharCast(hash.data()), hash.size());
190189
break;
@@ -234,7 +233,7 @@ class QuorumHash
234233
//! CONSENSUS: Do not remove or reorder the types in this variant. This
235234
//! class relies on the type ordinality to tag serialized values.
236235
//!
237-
boost::variant<Invalid, uint256, Md5Sum> m_hash;
236+
std::variant<Invalid, uint256, Md5Sum> m_hash;
238237
}; // QuorumHash
239238

240239
//!

src/gridcoin/voting/builders.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class CoinPicker
147147
//! \brief Adds outputs for an address only when an address represents
148148
//! a pay-to-public-key or pay-to-public-key-hash destination.
149149
//!
150-
class PubkeyDestinationFilter : public boost::static_visitor<void>
150+
class PubkeyDestinationFilter
151151
{
152152
public:
153153
//!
@@ -232,7 +232,7 @@ class CoinPicker
232232
// more advanced redemption scripts like multisig yet:
233233
//
234234
auto filter = std::bind(pubkey_filter, std::placeholders::_1, txo);
235-
boost::apply_visitor(filter, dest);
235+
std::visit(filter, dest);
236236
}
237237

238238
return by_address;

0 commit comments

Comments
 (0)