Commit 0a8487bd authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook GitHub Bot

let to_ascii_max and to_ascii_max_decimal be variables

Summary: No strict need for them to be functions.

Differential Revision: D27484949

fbshipit-source-id: f0fbc91aa9940720bbd3b685b730acc314bf122d
parent db0244ad
......@@ -171,13 +171,13 @@ void flush() {
}
void printDec(uint64_t val) {
char buf[to_ascii_size_max_decimal<uint64_t>()];
char buf[to_ascii_size_max_decimal<uint64_t>];
size_t n = to_ascii_decimal(buf, val);
gStackTracePrinter->print(StringPiece(buf, n));
}
void printHex(uint64_t val) {
char buf[2 + to_ascii_size_max<16, uint64_t>()];
char buf[2 + to_ascii_size_max<16, uint64_t>];
auto out = buf + 0;
*out++ = '0';
*out++ = 'x';
......
......@@ -113,7 +113,7 @@ void SymbolizePrinter::print(const SymbolizedFrame& frame) {
}
doPrint(fileBuf);
char buf[to_ascii_size_max_decimal<decltype(frame.location.line)>()];
char buf[to_ascii_size_max_decimal<decltype(frame.location.line)>];
uint32_t n = to_ascii_decimal(buf, frame.location.line);
doPrint(":");
doPrint(StringPiece(buf, n));
......
......@@ -57,7 +57,7 @@ namespace symbolizer {
namespace {
template <typename PrintFunc>
void printAsyncStackInfo(PrintFunc print) {
char buf[to_ascii_size_max<16, uint64_t>()];
char buf[to_ascii_size_max<16, uint64_t>];
auto printHex = [&print, &buf](uint64_t val) {
print("0x");
print(StringPiece(buf, to_ascii_lower<16>(buf, val)));
......
......@@ -519,7 +519,7 @@ void flushStderr() {
[[noreturn]] FOLLY_COLD void safe_assert_terminate_v(
safe_assert_arg const* arg_, int const error, va_list msg) noexcept {
auto const& arg = *arg_;
char buf[to_ascii_size_max_decimal<uint64_t>()];
char buf[to_ascii_size_max_decimal<uint64_t>];
writeStderr("\n\nAssertion failure: ");
writeStderr(arg.expr + 1, strlen(arg.expr) - 2);
......
......@@ -333,22 +333,16 @@ FOLLY_ALWAYS_INLINE size_t to_ascii_with_table(char* out, uint64_t v) {
//
// In base 10, u64 requires at most 20 bytes, u32 at most 10, u16 at most 5,
// and u8 at most 3.
//
// async-signal-safe
template <uint64_t Base, typename I>
constexpr size_t to_ascii_size_max() {
return detail::to_ascii_powers<Base, I>::size;
}
FOLLY_INLINE_VARIABLE constexpr size_t to_ascii_size_max =
detail::to_ascii_powers<Base, I>::size;
// to_ascii_size_max_decimal
//
// An alias to to_ascii_size_max<10>.
//
// async-signal-safe
template <typename I>
constexpr size_t to_ascii_size_max_decimal() {
return to_ascii_size_max<10, I>();
}
FOLLY_INLINE_VARIABLE constexpr size_t to_ascii_size_max_decimal =
to_ascii_size_max<10, I>;
// to_ascii_size
//
......@@ -392,7 +386,7 @@ size_t to_ascii_with(char* outb, char const* oute, uint64_t v) {
}
template <uint64_t Base, typename Alphabet, size_t N>
size_t to_ascii_with(char (&out)[N], uint64_t v) {
static_assert(N >= to_ascii_size_max<Base, decltype(v)>(), "out too small");
static_assert(N >= to_ascii_size_max<Base, decltype(v)>, "out too small");
return detail::to_ascii_with_table<Base, Alphabet>(out, v);
}
......
......@@ -150,7 +150,7 @@ static void to_ascii_size_go(size_t iters, size_t index, F f) {
template <uint64_t Base, typename F>
static void to_ascii_go(size_t iters, size_t index, F f) {
char out[1 + folly::to_ascii_size_max<Base, uint64_t>()];
char out[1 + folly::to_ascii_size_max<Base, uint64_t>];
while (iters--) {
auto const v = inputs<Base>::data[index] + (iters % 8);
auto const size = folly::to_ascii_size<Base>(v);
......
......@@ -117,17 +117,17 @@ TEST_F(ToAsciiTest, to_ascii_powers_u64_8) {
}
TEST_F(ToAsciiTest, to_ascii_size_max_u64_16) {
constexpr auto const actual = folly::to_ascii_size_max<16, uint64_t>();
constexpr auto const actual = folly::to_ascii_size_max<16, uint64_t>;
EXPECT_EQ(16, actual);
}
TEST_F(ToAsciiTest, to_ascii_size_max_u64_10) {
constexpr auto const actual = folly::to_ascii_size_max<10, uint64_t>();
constexpr auto const actual = folly::to_ascii_size_max<10, uint64_t>;
EXPECT_EQ(20, actual);
}
TEST_F(ToAsciiTest, to_ascii_size_max_u64_8) {
constexpr auto const actual = folly::to_ascii_size_max<8, uint64_t>();
constexpr auto const actual = folly::to_ascii_size_max<8, uint64_t>;
EXPECT_EQ(22, actual);
}
......@@ -232,7 +232,7 @@ static void to_ascii_compare(F _) {
for (auto const n : inputs<Base>::data) {
auto const expected = std::to_string(n);
SCOPED_TRACE(expected);
std::string actual(folly::to_ascii_size_max<Base, uint64_t>(), '\0');
std::string actual(folly::to_ascii_size_max<Base, uint64_t>, '\0');
auto const size = _(&actual[0], n);
EXPECT_EQ(expected.size(), size);
EXPECT_EQ(expected, actual.substr(0, size));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment