forked from mpusz/mp-units
perf: temporary string creation removed from quantity::op<<()
This commit is contained in:
@@ -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
|
@@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user