perf: temporary string creation removed from quantity::op<<()

This commit is contained in:
Mateusz Pusz
2020-09-15 07:30:06 +02:00
parent fd8d2e672b
commit 8687527b34
2 changed files with 7 additions and 14 deletions

View File

@@ -178,16 +178,4 @@ constexpr auto unit_text()
} }
} }
template<typename CharT, class Traits, Quantity Q>
std::basic_string<CharT> to_string(const Q& q)
{
std::basic_ostringstream<CharT, Traits> s;
s << q.count();
constexpr auto symbol = unit_text<typename Q::dimension, typename Q::unit>();
if constexpr (symbol.standard().size()) {
s << " " << symbol.standard();
}
return s.str();
}
} // namespace units::detail } // namespace units::detail

View File

@@ -26,7 +26,7 @@
#include <units/bits/common_quantity.h> #include <units/bits/common_quantity.h>
#include <units/bits/dimension_op.h> #include <units/bits/dimension_op.h>
#include <units/bits/pow.h> #include <units/bits/pow.h>
#include <units/bits/to_string.h> #include <units/bits/unit_text.h>
#include <units/generic/dimensionless.h> #include <units/generic/dimensionless.h>
#include <units/quantity_cast.h> #include <units/quantity_cast.h>
#include <compare> #include <compare>
@@ -334,7 +334,12 @@ public:
template<class CharT, class Traits> template<class CharT, class Traits>
friend std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const quantity& q) friend std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const quantity& q)
{ {
return os << detail::to_string<CharT, Traits>(q); os << q.count();
constexpr auto symbol = detail::unit_text<D, U>();
if constexpr (symbol.standard().size()) {
os << " " << symbol.standard();
}
return os;
} }
}; };