@@ -1544,31 +1544,38 @@ inline fb303::ThreadCachedServiceData& tcData() {
1544
1544
#define DEFINE_histogram (varname, ...) \
1545
1545
::facebook::fb303::HistogramWrapper STATS_##varname(#varname, ##__VA_ARGS__)
1546
1546
1547
+ namespace facebook ::fb303::detail {
1548
+
1547
1549
// We use this function to extract the number of placeholders from our keyformat
1548
1550
// at compile-time.
1549
1551
// 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;
1559
1562
}
1560
1563
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)> \
1566
1572
STATS_##varname(keyformat, ##__VA_ARGS__)
1567
1573
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)> \
1574
1581
STATS_##varname(keyformat, bucketWidth, min, max, __VA_ARGS__)
0 commit comments