diff options
author | Mark de Wever <koraq@xs4all.nl> | 2021-10-02 12:38:46 +0200 |
---|---|---|
committer | Mark de Wever <koraq@xs4all.nl> | 2022-06-11 15:25:56 +0200 |
commit | aed5ddf8d09762f3adb80dc842239ad67ed2e301 (patch) | |
tree | a7af63bb66716ca980ad4287260f0f04b0c3703a /libcxx/benchmarks | |
parent | 338fd211e7c36d7a2e0eee4c3530ed656c893a9d (diff) | |
download | llvm-aed5ddf8d09762f3adb80dc842239ad67ed2e301.tar.gz |
[libc++][format] Implement format-string.
Implements the compile-time checking of the formatting arguments.
Completes:
- P2216 std::format improvements
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D121530
Diffstat (limited to 'libcxx/benchmarks')
-rw-r--r-- | libcxx/benchmarks/formatter_float.bench.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libcxx/benchmarks/formatter_float.bench.cpp b/libcxx/benchmarks/formatter_float.bench.cpp index 3190b3779c5d..ee04647aa955 100644 --- a/libcxx/benchmarks/formatter_float.bench.cpp +++ b/libcxx/benchmarks/formatter_float.bench.cpp @@ -216,17 +216,27 @@ struct FloatingPoint { void run(benchmark::State& state) const { std::array<F, 1000> data{Value<V::value>::template make_data<F>()}; std::array<char, 20'000> output; - std::string fmt{std::string("{:") + Alignment<A::value>::fmt + Precision<P::value>::fmt + - Localization<L::value>::fmt + DisplayType<DT::value>::fmt + "}"}; while (state.KeepRunningBatch(1000)) for (F value : data) - benchmark::DoNotOptimize(std::format_to(output.begin(), fmt, value)); + benchmark::DoNotOptimize(std::format_to(output.begin(), std::string_view{fmt.data(), fmt.size()}, value)); } std::string name() const { return "FloatingPoint" + L::name() + DT::name() + T::name() + V::name() + A::name() + P::name(); } + + static constexpr std::string make_fmt() { + return std::string("{:") + Alignment<A::value>::fmt + Precision<P::value>::fmt + Localization<L::value>::fmt + + DisplayType<DT::value>::fmt + "}"; + } + + static constexpr auto fmt = []() { + constexpr size_t s = make_fmt().size(); + std::array<char, s> r; + std::ranges::copy(make_fmt(), r.begin()); + return r; + }(); }; int main(int argc, char** argv) { |