Skip to content

Commit ec0310d

Browse files
yfeldblumfacebook-github-bot
authored andcommitted
tweaks to helper fn countPlaceholders
Summary: * Properly namespace it. * Revise it with C++ >= 14 constexpr defn. Reviewed By: Gownta Differential Revision: D66590536 fbshipit-source-id: a537c89e64fa436a5f7ddb2ae50535a992551a38
1 parent c053ccf commit ec0310d

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

fb303/ThreadCachedServiceData.h

+27-20
Original file line numberDiff line numberDiff line change
@@ -1544,31 +1544,38 @@ inline fb303::ThreadCachedServiceData& tcData() {
15441544
#define DEFINE_histogram(varname, ...) \
15451545
::facebook::fb303::HistogramWrapper STATS_##varname(#varname, ##__VA_ARGS__)
15461546

1547+
namespace facebook::fb303::detail {
1548+
15471549
// We use this function to extract the number of placeholders from our keyformat
15481550
// at compile-time.
15491551
// This also ensures that our keyformat is a constexpr.
1550-
constexpr int countPlaceholders(folly::StringPiece keyformat) {
1551-
return keyformat.size() < 2
1552-
? 0
1553-
: ((*keyformat.begin() == '{' && *(keyformat.begin() + 1) == '}')
1554-
? (1 +
1555-
countPlaceholders(
1556-
folly::range(keyformat.begin() + 2, keyformat.end())))
1557-
: countPlaceholders(
1558-
folly::range(keyformat.begin() + 1, keyformat.end())));
1552+
constexpr size_t count_placeholders(std::string_view keyformat) {
1553+
size_t n = 0;
1554+
for (size_t i = 0; i < keyformat.size(); ++i) {
1555+
if (keyformat[i] == '{') {
1556+
assert(i + 1 < keyformat.size());
1557+
assert(keyformat[i + 1] == '}');
1558+
++n;
1559+
}
1560+
}
1561+
return n;
15591562
}
15601563

1561-
#define DEFINE_dynamic_timeseries(varname, keyformat, ...) \
1562-
static_assert( \
1563-
countPlaceholders(keyformat) > 0, \
1564-
"Must have at least one placeholder."); \
1565-
::facebook::fb303::DynamicTimeseriesWrapper<countPlaceholders(keyformat)> \
1564+
} // namespace facebook::fb303::detail
1565+
1566+
#define DEFINE_dynamic_timeseries(varname, keyformat, ...) \
1567+
static_assert( \
1568+
::facebook::fb303::detail::count_placeholders(keyformat) > 0, \
1569+
"Must have at least one placeholder."); \
1570+
::facebook::fb303::DynamicTimeseriesWrapper< \
1571+
::facebook::fb303::detail::count_placeholders(keyformat)> \
15661572
STATS_##varname(keyformat, ##__VA_ARGS__)
15671573

1568-
#define DEFINE_dynamic_histogram( \
1569-
varname, keyformat, bucketWidth, min, max, ...) \
1570-
static_assert( \
1571-
countPlaceholders(keyformat) > 0, \
1572-
"Must have at least one placeholder."); \
1573-
::facebook::fb303::DynamicHistogramWrapper<countPlaceholders(keyformat)> \
1574+
#define DEFINE_dynamic_histogram( \
1575+
varname, keyformat, bucketWidth, min, max, ...) \
1576+
static_assert( \
1577+
::facebook::fb303::detail::count_placeholders(keyformat) > 0, \
1578+
"Must have at least one placeholder."); \
1579+
::facebook::fb303::DynamicHistogramWrapper< \
1580+
::facebook::fb303::detail::count_placeholders(keyformat)> \
15741581
STATS_##varname(keyformat, bucketWidth, min, max, __VA_ARGS__)

fb303/detail/QuantileStatWrappers.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,10 @@ class DynamicQuantileStatWrapper {
127127
extern ::facebook::fb303::detail::DynamicQuantileStatWrapper<keyNumArgs> \
128128
STATS_##varname
129129

130-
#define DEFINE_dynamic_quantile_stat(varname, keyformat, ...) \
131-
static_assert( \
132-
countPlaceholders(keyformat) > 0, \
133-
"Must have at least one placeholder."); \
134-
facebook::fb303::detail::DynamicQuantileStatWrapper<countPlaceholders( \
135-
keyformat)> \
130+
#define DEFINE_dynamic_quantile_stat(varname, keyformat, ...) \
131+
static_assert( \
132+
::facebook::fb303::detail::count_placeholders(keyformat) > 0, \
133+
"Must have at least one placeholder."); \
134+
facebook::fb303::detail::DynamicQuantileStatWrapper< \
135+
::facebook::fb303::detail::count_placeholders(keyformat)> \
136136
STATS_##varname(keyformat, ##__VA_ARGS__)

0 commit comments

Comments
 (0)