Skip to content

Commit 189ae0c

Browse files
committed
util: dedup code in callers of serviceFlagToStr()
Introduce `serviceFlagsToStr()` which hides the internals of the bitmask and simplifies callers of `serviceFlagToStr()`.
1 parent fbacad1 commit 189ae0c

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

src/protocol.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,12 @@ const std::vector<std::string> &getAllNetMessageTypes()
195195
return allNetMessageTypesVec;
196196
}
197197

198-
std::string serviceFlagToStr(size_t bit)
198+
/**
199+
* Convert a service flag (NODE_*) to a human readable string.
200+
* It supports unknown service flags which will be returned as "UNKNOWN[...]".
201+
* @param[in] bit the service flag is calculated as (1 << bit)
202+
*/
203+
static std::string serviceFlagToStr(size_t bit)
199204
{
200205
const uint64_t service_flag = 1ULL << bit;
201206
switch ((ServiceFlags)service_flag) {
@@ -219,3 +224,16 @@ std::string serviceFlagToStr(size_t bit)
219224
stream << "]";
220225
return stream.str();
221226
}
227+
228+
std::vector<std::string> serviceFlagsToStr(uint64_t flags)
229+
{
230+
std::vector<std::string> str_flags;
231+
232+
for (size_t i = 0; i < sizeof(flags) * 8; ++i) {
233+
if (flags & (1ULL << i)) {
234+
str_flags.emplace_back(serviceFlagToStr(i));
235+
}
236+
}
237+
238+
return str_flags;
239+
}

src/protocol.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,11 @@ enum ServiceFlags : uint64_t {
289289
};
290290

291291
/**
292-
* Convert a service flag (NODE_*) to a human readable string.
292+
* Convert service flags (a bitmask of NODE_*) to human readable strings.
293293
* It supports unknown service flags which will be returned as "UNKNOWN[...]".
294-
* @param[in] bit the service flag is calculated as (1 << bit)
294+
* @param[in] flags multiple NODE_* bitwise-OR-ed together
295295
*/
296-
std::string serviceFlagToStr(size_t bit);
296+
std::vector<std::string> serviceFlagsToStr(uint64_t flags);
297297

298298
/**
299299
* Gets the set of service flags which are "desirable" for a given peer.

src/qt/guiutil.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -755,12 +755,8 @@ QString formatServicesStr(quint64 mask)
755755
{
756756
QStringList strList;
757757

758-
for (int i = 0; i < 64; i++) {
759-
uint64_t check = 1ull << i;
760-
if (mask & check)
761-
{
762-
strList.append(QString::fromStdString(serviceFlagToStr(i)));
763-
}
758+
for (const auto& flag : serviceFlagsToStr(mask)) {
759+
strList.append(QString::fromStdString(flag));
764760
}
765761

766762
if (strList.size())

src/rpc/util.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -841,14 +841,10 @@ std::vector<CScript> EvalDescriptorStringOrObject(const UniValue& scanobject, Fl
841841

842842
UniValue GetServicesNames(ServiceFlags services)
843843
{
844-
const uint64_t services_n = services;
845844
UniValue servicesNames(UniValue::VARR);
846845

847-
for (int i = 0; i < 64; ++i) {
848-
const uint64_t mask = 1ull << i;
849-
if (services_n & mask) {
850-
servicesNames.push_back(serviceFlagToStr(i));
851-
}
846+
for (const auto& flag : serviceFlagsToStr(services)) {
847+
servicesNames.push_back(flag);
852848
}
853849

854850
return servicesNames;

0 commit comments

Comments
 (0)