|
39 | 39 | #if SWIFT_LIB_SUPPORTED |
40 | 40 | #include "swift/Runtime/SwiftDtoa.h" |
41 | 41 | #endif |
| 42 | +#if XJB_SUPPORTED |
| 43 | +#include "ftoa.h" |
| 44 | +#endif |
42 | 45 | #if (__SIZEOF_INT128__ == 16) && (defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)) |
43 | 46 | #include "yy_double.h" |
44 | 47 | #define YY_DOUBLE_SUPPORTED 1 |
@@ -361,6 +364,17 @@ int zmij(T d, std::span<char>& buffer) { |
361 | 364 | return zmij::write(buffer.data(), buffer.size(), d); |
362 | 365 | } |
363 | 366 |
|
| 367 | +template<arithmetic_float T> |
| 368 | +int xjb(T d, std::span<char>& buffer) { |
| 369 | +#if XJB_SUPPORTED |
| 370 | + const char* end_ptr = xjb_ftoa(d, buffer.data()); |
| 371 | + return end_ptr - buffer.data(); |
| 372 | +#else |
| 373 | + std::cerr << "xjb not supported" << std::endl; |
| 374 | + std::abort(); |
| 375 | +#endif |
| 376 | +} |
| 377 | + |
364 | 378 | template<arithmetic_float T> |
365 | 379 | int teju_jagua(T d, std::span<char>& buffer) { |
366 | 380 | const auto fields = teju::traits_t<T>::teju(d); |
@@ -622,6 +636,7 @@ std::vector<BenchArgs<T>> initArgs(bool use_errol = false, size_t repeat = 0, si |
622 | 636 | args.emplace_back("dragonboxlm" , wrap(s::dragonboxlm<T>) , true); |
623 | 637 | args.emplace_back("dragonbox 1.1.3" , wrap(s::dragonbox<T>) , true); |
624 | 638 | args.emplace_back("ryu" , wrap(s::ryu<T>) , true); |
| 639 | + args.emplace_back("xjb 1.4.0" , wrap(s::xjb<T>) , XJB_SUPPORTED); |
625 | 640 | args.emplace_back("teju_jagua" , wrap(s::teju_jagua<T>) , true); |
626 | 641 | args.emplace_back("double_conversion" , wrap(s::double_conversion<T>) , true); |
627 | 642 | args.emplace_back("swiftDtoa" , wrap(s::swiftDtoa<T>) , SWIFT_LIB_SUPPORTED); |
|
0 commit comments