60template <UnitKind Kind,
class Ratio = std::ratio<1>>
64 constexpr explicit Unit(
float val) : _value(val) {}
66 template <UnitKind FromKind,
class FromRatio>
68 : _value(from.template
value<Ratio>())
75 template <
class TargetRatio = Ratio>
78 constexpr auto currentRatio =
79 static_cast<float>(Ratio::num) /
static_cast<float>(Ratio::den);
80 constexpr auto targetRatio =
static_cast<float>(TargetRatio::num) /
81 static_cast<float>(TargetRatio::den);
83 return _value * currentRatio / targetRatio;
86 template <UnitKind TargetKind,
class TargetRatio = Ratio>
92 template <UnitKind PKind,
class PRatio>
101template <UnitKind Kind,
class Ratio>
108template <UnitKind Kind,
class Ratio>
115template <UnitKind Kind,
class Ratio>
121template <UnitKind Kind,
class Ratio>
127template <UnitKind Kind,
class Ratio>
133template <UnitKind Kind,
class Ratio>
140template <UnitKind Kind,
class Ratio>
144 return lhs.template value() == rhs.template value();
147template <UnitKind Kind,
class Ratio>
151 return lhs.template value() != rhs.template value();
154template <UnitKind Kind,
class Ratio>
158 return lhs.template value() < rhs.template value();
161template <UnitKind Kind,
class Ratio>
165 return lhs.template value() > rhs.template value();
168template <UnitKind Kind,
class Ratio>
172 return lhs.template value() <= rhs.template value();
175template <UnitKind Kind,
class Ratio>
179 return lhs.template value() >= rhs.template value();
183template <UnitKind Kind,
class Ratio>
191template <UnitKind Kind,
class Ratio>
199template <UnitKind Kind,
class Ratio>
206template <UnitKind Kind,
class Ratio>
214template <UnitKind Kind,
class Ratio>
220template <UnitKind Kind,
class Ratio>
226template <UnitKind Kind,
class Ratio>
229 return !unit.template value();
233template <UnitKind Kind,
class Ratio>
236 os << unit.template value();
240template <UnitKind Kind,
class Ratio>
constexpr float value() const
Return the value of the unit in the target ratio.
constexpr Unit(float val)
friend std::istream & operator>>(std::istream &is, Unit< PKind, PRatio > &unit)
constexpr Unit(Unit< FromKind, FromRatio > const &from)
constexpr bool operator!(const Unit< Kind, Ratio > &unit)
constexpr bool operator==(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr Unit< Kind, Ratio > & operator-=(Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr bool operator>(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr bool operator<=(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
std::istream & operator>>(std::istream &is, Unit< Kind, Ratio > &unit)
constexpr auto operator/(const Unit< Kind, Ratio > &lhs, float rhs)
constexpr bool operator!=(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr Unit< Kind, Ratio > & operator*=(Unit< Kind, Ratio > &lhs, float rhs)
constexpr auto operator-(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr bool operator<(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
std::ostream & operator<<(std::ostream &os, const Unit< Kind, Ratio > &unit)
constexpr bool operator>=(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr auto operator*(const Unit< Kind, Ratio > &lhs, float rhs)
constexpr Unit< Kind, Ratio > & operator+=(Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr auto operator+(const Unit< Kind, Ratio > &lhs, const Unit< Kind, Ratio > &rhs)
constexpr Unit< Kind, Ratio > & operator/=(Unit< Kind, Ratio > &lhs, float rhs)
UnitKind
Enumeration of the different kinds of units.
Driver for the VN100S IMU.