roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
lineic_number.h
Go to the documentation of this file.
1#pragma once
2
3#include <cmath>
4
5#include "roo_flags.h"
6#include "roo_logging.h"
8
9#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
10#include <string>
11#endif
12
13#if defined(ARDUINO)
14#include <Arduino.h>
15#endif
16
17namespace roo_quantity {
18
19/// Representation of lineic number, a reciprocal of length, internally
20/// stored as floating-point units per meter.
22 public:
23 /// Creates a lineic number object representing an 'unknown'
24 /// lineic number.
25 LineicNumber() : lineic_number_(std::nanf("")) {}
26
27 /// Returns the lineic number in GigaUnitsPerMeter.
28 float inGigaUnitsPerMeter() const { return lineic_number_ * 0.000000001f; }
29
30 /// Returns the lineic number in Mega-units per meter.
31 float inMegaUnitsPerMeter() const { return lineic_number_ * 0.000001f; }
32
33 /// Returns the lineic number in kilo-units per meter.
34 float inKiloUnitsPerMeter() const { return lineic_number_ * 0.001f; }
35
36 /// Returns the lineic number in units per meter.
37 float inUnitsPerMeter() const { return lineic_number_; }
38
39 /// Returns the lineic number in milli-units per meter.
40 float inMilliUnitsPerMeter() const { return lineic_number_ * 1000.0f; }
41
42 /// Returns the lineic number in micro-units per meter.
43 float inMicroUnitsPerMeter() const { return lineic_number_ * 1000000.0f; }
44
45 /// Returns the lineic number in units per centimeter.
46 float inUnitsPerCentimeter() const { return lineic_number_ * 0.01f; }
47
48 /// Returns the lineic number in units per millimeter.
49 float inUnitsPerMillimeter() const { return lineic_number_ * 0.001f; }
50
51 /// Returns the lineic number in units per kilometer.
52 float inUnitsPerKilometer() const { return lineic_number_ * 1000.0f; }
53
54 /// Returns the lineic number in units per inch (DPI).
55 float inUnitsPerInch() const { return lineic_number_ * 0.0254f; }
56
57 /// Returns the lineic number in units per inch (DPI).
58 float inDPI() const { return inUnitsPerInch(); }
59
60 /// Returns the lineic number in units per foot.
61 float inUnitsPerFoot() const { return lineic_number_ * 0.3048f; }
62
63 /// Returns the lineic number in units per yard.
64 float inUnitsPerYard() const { return lineic_number_ * 0.9144f; }
65
66 /// Returns whether the object represents an unknown lineic number.
67 bool isUnknown() const { return std::isnan(lineic_number_); }
68
69 bool operator<(const LineicNumber &other) const {
70 return lineic_number_ < other.lineic_number_;
71 }
72
73 bool operator==(const LineicNumber &other) const {
74 return lineic_number_ == other.lineic_number_;
75 }
76
77 bool operator>(const LineicNumber &other) const {
78 return other.lineic_number_ < lineic_number_;
79 }
80
81 bool operator<=(const LineicNumber &other) const {
82 return !(other.lineic_number_ < lineic_number_);
83 }
84
85 bool operator>=(const LineicNumber &other) const {
86 return !(lineic_number_ < other.lineic_number_);
87 }
88
89 bool operator!=(const LineicNumber &other) const {
90 return !(lineic_number_ == other.lineic_number_);
91 }
92
93 LineicNumber &operator*=(float multi) {
94 lineic_number_ *= multi;
95 return *this;
96 }
97
99 lineic_number_ /= div;
100 return *this;
101 }
102
103#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
104 /// Returns the string representation of the lineic number.
105 std::string asString() const;
106#endif
107
108#if defined(ARDUINO)
109 String asArduinoString() const;
110#endif
111
112 private:
114
116
117 explicit LineicNumber(float lineic_number) : lineic_number_(lineic_number) {}
118
119 /// Stored in units per meter.
120 float lineic_number_;
121};
122
123inline LineicNumber LineicNumberInUnitsPerMeter(float lineic_number);
124
125/// Returns a lineic number object representing an unknown
126/// lineic number.
128
129/// Returns a lineic number object equivalent to the specified
130/// lineic number expressed in giga-units per meter.
132 return LineicNumberInUnitsPerMeter(lineic_number * 1000000000.0f);
133}
134
135/// Returns a lineic number object equivalent to the specified
136/// lineic number expressed in mega-units per meter.
138 return LineicNumberInUnitsPerMeter(lineic_number * 1000000.0f);
139}
140
141/// Returns a lineic number object equivalent to the specified
142/// lineic number expressed in kilo-units per meter.
144 return LineicNumberInUnitsPerMeter(lineic_number * 1000.0f);
145}
146
147/// Returns a lineic number object equivalent to the specified
148/// lineic number expressed in units per meter.
149inline LineicNumber LineicNumberInUnitsPerMeter(float lineic_number) {
150 return LineicNumber(lineic_number);
151}
152
153/// Returns a lineic number object equivalent to the specified
154/// lineic number expressed in milli-units per meter.
156 return LineicNumberInUnitsPerMeter(lineic_number * 0.001f);
157}
158
159/// Returns a lineic number object equivalent to the specified
160/// lineic number expressed in micro-units per meter.
162 return LineicNumberInUnitsPerMeter(lineic_number * 0.000001f);
163}
164
165/// Returns a lineic number object equivalent to the specified
166/// lineic number expressed in units per centimeter.
168 return LineicNumberInUnitsPerMeter(lineic_number * 100.0f);
169}
170
171/// Returns a lineic number object equivalent to the specified
172/// lineic number expressed in units per millimeter.
174 return LineicNumberInUnitsPerMeter(lineic_number * 1000.0f);
175}
176
177/// Returns a lineic number object equivalent to the specified
178/// lineic number expressed in units per kilometer.
180 return LineicNumberInUnitsPerMeter(lineic_number * 0.001f);
181}
182
183/// Returns a lineic number object equivalent to the specified
184/// lineic number expressed in units per inch.
185inline LineicNumber LineicNumberInUnitsPerInch(float lineic_number) {
186 return LineicNumberInUnitsPerMeter(lineic_number * 39.37007874f);
187}
188
189/// Returns a lineic number object equivalent to the specified
190/// lineic number expressed in units per foot.
191inline LineicNumber LineicNumberInUnitsPerFoot(float lineic_number) {
192 return LineicNumberInUnitsPerMeter(lineic_number * 3.280839895f);
193}
194
195/// Returns a lineic number object equivalent to the specified
196/// lineic number expressed in units per yard.
197inline LineicNumber LineicNumberInUnitsPerYard(float lineic_number) {
198 return LineicNumberInUnitsPerMeter(lineic_number * 1.0936132983f);
199}
200
204
208
209inline float operator*(Length a, LineicNumber b) {
210 return a.inMeters() * b.inUnitsPerMeter();
211}
212
213inline float operator*(LineicNumber a, Length b) {
214 return a.inUnitsPerMeter() * b.inMeters();
215}
216
220
222 return a.inUnitsPerMeter() / b.inUnitsPerMeter();
223}
224
225inline Length operator/(float a, LineicNumber b) {
226 return LengthInMeters(a / b.inUnitsPerMeter());
227}
228
229inline LineicNumber operator/(float a, Length b) {
231}
232
233roo_logging::Stream& operator<<(roo_logging::Stream& os,
234 const LineicNumber& val);
235
236} // namespace roo_quantity
Representation of length, internally stored as floating-point meters.
Definition length.h:19
float inMeters() const
Returns the length in meters.
Definition length.h:28
Representation of lineic number, a reciprocal of length, internally stored as floating-point units pe...
float inUnitsPerCentimeter() const
Returns the lineic number in units per centimeter.
bool operator==(const LineicNumber &other) const
friend LineicNumber UnknownLineicNumber()
Returns a lineic number object representing an unknown lineic number.
LineicNumber()
Creates a lineic number object representing an 'unknown' lineic number.
float inDPI() const
Returns the lineic number in units per inch (DPI).
bool operator<(const LineicNumber &other) const
friend LineicNumber LineicNumberInUnitsPerMeter(float)
Returns a lineic number object equivalent to the specified lineic number expressed in units per meter...
float inUnitsPerKilometer() const
Returns the lineic number in units per kilometer.
bool isUnknown() const
Returns whether the object represents an unknown lineic number.
float inUnitsPerFoot() const
Returns the lineic number in units per foot.
float inUnitsPerInch() const
Returns the lineic number in units per inch (DPI).
float inGigaUnitsPerMeter() const
Returns the lineic number in GigaUnitsPerMeter.
float inUnitsPerMillimeter() const
Returns the lineic number in units per millimeter.
LineicNumber & operator/=(float div)
bool operator>=(const LineicNumber &other) const
float inMicroUnitsPerMeter() const
Returns the lineic number in micro-units per meter.
float inMegaUnitsPerMeter() const
Returns the lineic number in Mega-units per meter.
bool operator>(const LineicNumber &other) const
float inMilliUnitsPerMeter() const
Returns the lineic number in milli-units per meter.
bool operator!=(const LineicNumber &other) const
LineicNumber & operator*=(float multi)
float inUnitsPerYard() const
Returns the lineic number in units per yard.
float inKiloUnitsPerMeter() const
Returns the lineic number in kilo-units per meter.
bool operator<=(const LineicNumber &other) const
float inUnitsPerMeter() const
Returns the lineic number in units per meter.
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
LineicNumber UnknownLineicNumber()
Returns a lineic number object representing an unknown lineic number.
Length LengthInMeters(float length)
Returns a length object equivalent to the specified length expressed in meters.
Definition length.h:133
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
LineicNumber LineicNumberInUnitsPerMillimeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per milli...
LineicNumber LineicNumberInMilliUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in milli-units per...
LineicNumber LineicNumberInUnitsPerKilometer(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per kilom...
LineicNumber LineicNumberInMicroUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in micro-units per...
LineicNumber LineicNumberInUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per meter...
LineicNumber LineicNumberInMegaUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in mega-units per ...
LineicNumber LineicNumberInUnitsPerYard(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per yard.
LineicNumber LineicNumberInUnitsPerInch(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per inch.
LineicNumber LineicNumberInGigaUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in giga-units per ...
LineicNumber LineicNumberInUnitsPerCentimeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per centi...
LineicNumber LineicNumberInUnitsPerFoot(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per foot.
LineicNumber LineicNumberInKiloUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in kilo-units per ...
Area operator/(Area a, float b)
Definition area.h:191
Area operator*(Area a, float b)
Definition area.h:183