RIT VEXU Core API
Loading...
Searching...
No Matches
number.h
1#pragma once
2
3class Number : public quantity_base<Number, dim_none> {
4 public:
5 typedef quantity_base<Number, dim_none> base_type;
6 typedef dim_none dimension;
7 constexpr explicit Number(double value = 0.0) : base_type(value) {}
8 static constexpr Number from_canonical(double value) { return Number(value); }
9 constexpr double value() const { return canonical_value(); }
10};
11
12template <>
13struct is_quantity<Number> : std::true_type {};
14
15Number quantity_for_dimension_probe(dim_none*, int);
16
17template <class Scalar>
18using number_arithmetic_enable_t = typename std::enable_if<std::is_arithmetic<Scalar>::value, Number>::type;
19
20template <class Scalar>
21constexpr number_arithmetic_enable_t<Scalar> operator+(const Number& left, Scalar right) {
22 return Number(left.value() + static_cast<double>(right));
23}
24template <class Scalar>
25constexpr number_arithmetic_enable_t<Scalar> operator+(Scalar left, const Number& right) {
26 return Number(static_cast<double>(left) + right.value());
27}
28template <class Scalar>
29constexpr number_arithmetic_enable_t<Scalar> operator-(const Number& left, Scalar right) {
30 return Number(left.value() - static_cast<double>(right));
31}
32template <class Scalar>
33constexpr number_arithmetic_enable_t<Scalar> operator-(Scalar left, const Number& right) {
34 return Number(static_cast<double>(left) - right.value());
35}
36
37template <>
38struct default_unit_for_quantity<Number> {
39 typedef void type;
40};