[wpimath] Disable iostream support for units and enable fmtlib (#3481)

Supersedes #2497.
This commit is contained in:
Tyler Veness
2021-07-13 11:41:07 -07:00
committed by GitHub
parent e4dc3908bb
commit 52bddaa97b
4 changed files with 169 additions and 52 deletions

View File

@@ -9,22 +9,8 @@
#include "units/base.h"
template <class Units, typename T, template <typename> class NonLinearScale>
struct fmt::formatter<units::unit_t<Units, T, NonLinearScale>> {
char presentation = 'f';
constexpr auto parse(fmt::format_parse_context& ctx) {
auto it = ctx.begin(), end = ctx.end();
if (it != end && (*it == 'f' || *it == 'e')) {
presentation = *it++;
}
if (it != end && *it != '}') {
throw fmt::format_error("invalid format");
}
return it;
}
struct fmt::formatter<units::unit_t<Units, T, NonLinearScale>>
: fmt::formatter<double> {
template <typename FormatContext>
auto format(const units::unit_t<Units, T, NonLinearScale>& obj,
FormatContext& ctx) {
@@ -34,7 +20,8 @@ struct fmt::formatter<units::unit_t<Units, T, NonLinearScale>> {
auto out = ctx.out();
out = fmt::format_to(out, "{}", units::convert<Units, BaseUnits>(obj()));
out = fmt::formatter<double>::format(
units::convert<Units, BaseUnits>(obj()), ctx);
if constexpr (units::traits::unit_traits<
Units>::base_unit_type::meter_ratio::num != 0) {