roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
areic_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"
7#include "roo_quantity/area.h"
9
10#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
11#include <string>
12#endif
13
14#if defined(ARDUINO)
15#include <Arduino.h>
16#endif
17
18namespace roo_quantity {
19
20/// Representation of areic number, a reciprocal of area, internally
21/// stored as floating-point units per square meter.
23 public:
24 /// Creates an areic number object representing an 'unknown'
25 /// areic number.
26 AreicNumber() : areic_number_(std::nanf("")) {}
27
28 /// Returns the areic number in GigaUnitsPerSquareMeter.
30 return areic_number_ * 0.000000001f;
31 }
32
33 /// Returns the areic number in Mega-units per square meter.
34 float inMegaUnitsPerSquareMeter() const { return areic_number_ * 0.000001f; }
35
36 /// Returns the areic number in kilo-units per square meter.
37 float inKiloUnitsPerSquareMeter() const { return areic_number_ * 0.001f; }
38
39 /// Returns the areic number in units per square meter.
40 float inUnitsPerSquareMeter() const { return areic_number_; }
41
42 /// Returns the areic number in milli-units per square meter.
43 float inMilliUnitsPerSquareMeter() const { return areic_number_ * 1000.0f; }
44
45 /// Returns the areic number in micro-units per square meter.
47 return areic_number_ * 1000000.0f;
48 }
49
50 /// Returns the areic number in units per square centimeter.
51 float inUnitsPerSquareCentimeter() const { return areic_number_ * 0.0001f; }
52
53 /// Returns the areic number in units per square millimeter.
54 float inUnitsPerSquareMillimeter() const { return areic_number_ * 0.000001f; }
55
56 /// Returns the areic number in units per square kilometer.
57 float inUnitsPerSquareKilometer() const { return areic_number_ * 1000000.0f; }
58
59 /// Returns the areic number in units per square inch.
60 float inUnitsPerSquareInch() const { return areic_number_ * 0.00064516f; }
61
62 /// Returns the areic number in units per square foot.
63 float inUnitsPerSquareFoot() const { return areic_number_ * 0.09290304f; }
64
65 /// Returns the areic number in units per square yard.
66 float inUnitsPerSquareYard() const { return areic_number_ * 0.83612736f; }
67
68 /// Returns whether the object represents an unknown areic number.
69 bool isUnknown() const { return std::isnan(areic_number_); }
70
71 bool operator<(const AreicNumber &other) const {
72 return areic_number_ < other.areic_number_;
73 }
74
75 bool operator==(const AreicNumber &other) const {
76 return areic_number_ == other.areic_number_;
77 }
78
79 bool operator>(const AreicNumber &other) const {
80 return other.areic_number_ < areic_number_;
81 }
82
83 bool operator<=(const AreicNumber &other) const {
84 return !(other.areic_number_ < areic_number_);
85 }
86
87 bool operator>=(const AreicNumber &other) const {
88 return !(areic_number_ < other.areic_number_);
89 }
90
91 bool operator!=(const AreicNumber &other) const {
92 return !(areic_number_ == other.areic_number_);
93 }
94
95 AreicNumber &operator*=(float multi) {
96 areic_number_ *= multi;
97 return *this;
98 }
99
101 areic_number_ /= div;
102 return *this;
103 }
104
105#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
106 /// Returns the string representation of the areic number.
107 std::string asString() const;
108#endif
109
110#if defined(ARDUINO)
111 String asArduinoString() const;
112#endif
113
114 private:
116
118
119 explicit AreicNumber(float areic_number) : areic_number_(areic_number) {}
120
121 /// Stored in units per square meter.
122 float areic_number_;
123};
124
125inline AreicNumber AreicNumberInUnitsPerSquareMeter(float areic_number);
126
127/// Returns a areic number object representing an unknown
128/// areic number.
130
131/// Returns a areic number object equivalent to the specified
132/// areic number expressed in giga-units per square meter.
134 return AreicNumberInUnitsPerSquareMeter(areic_number * 1000000000.0f);
135}
136
137/// Returns a areic number object equivalent to the specified
138/// areic number expressed in mega-units per square meter.
140 return AreicNumberInUnitsPerSquareMeter(areic_number * 1000000.0f);
141}
142
143/// Returns a areic number object equivalent to the specified
144/// areic number expressed in kilo-units per square meter.
146 return AreicNumberInUnitsPerSquareMeter(areic_number * 1000.0f);
147}
148
149/// Returns a areic number object equivalent to the specified
150/// areic number expressed in units per square meter.
152 return AreicNumber(areic_number);
153}
154
155/// Returns a areic number object equivalent to the specified
156/// areic number expressed in milli-units per square meter.
158 return AreicNumberInUnitsPerSquareMeter(areic_number * 0.001f);
159}
160
161/// Returns a areic number object equivalent to the specified
162/// areic number expressed in micro-units per square meter.
164 return AreicNumberInUnitsPerSquareMeter(areic_number * 0.000001f);
165}
166
167/// Returns a areic number object equivalent to the specified
168/// areic number expressed in units per square centimeter.
170 return AreicNumberInUnitsPerSquareMeter(areic_number * 10000.0f);
171}
172
173/// Returns a areic number object equivalent to the specified
174/// areic number expressed in units per square millimeter.
176 return AreicNumberInUnitsPerSquareMeter(areic_number * 1000000.0f);
177}
178
179/// Returns a areic number object equivalent to the specified
180/// areic number expressed in units per square kilometer.
182 return AreicNumberInUnitsPerSquareMeter(areic_number * 0.000001f);
183}
184
185/// Returns a areic number object equivalent to the specified
186/// areic number expressed in units per square inch.
188 return AreicNumberInUnitsPerSquareMeter(areic_number * 1550.0031000062f);
189}
190
191/// Returns a areic number object equivalent to the specified
192/// areic number expressed in units per square foot.
194 return AreicNumberInUnitsPerSquareMeter(areic_number * 10.7639104167f);
195}
196
197/// Returns a areic number object equivalent to the specified
198/// areic number expressed in units per square yard.
200 return AreicNumberInUnitsPerSquareMeter(areic_number * 1.1959900463f);
201}
202
206
210
211inline float operator*(Area a, AreicNumber b) {
212 return a.inSquareMeters() * b.inUnitsPerSquareMeter();
213}
214
215inline float operator*(AreicNumber a, Area b) {
216 return a.inUnitsPerSquareMeter() * b.inSquareMeters();
217}
218
222
226
230
233}
234
235inline Area operator/(float a, AreicNumber b) {
237}
238
239inline AreicNumber operator/(float a, Area b) {
241}
242
243roo_logging::Stream& operator<<(roo_logging::Stream& os,
244 const AreicNumber& val);
245
246} // namespace roo_quantity
Representation of area, internally stored as floating-point square meters.
Definition area.h:20
float inSquareMeters() const
Returns the area in square meters.
Definition area.h:35
Representation of areic number, a reciprocal of area, internally stored as floating-point units per s...
friend AreicNumber UnknownAreicNumber()
Returns a areic number object representing an unknown areic number.
bool operator!=(const AreicNumber &other) const
float inUnitsPerSquareInch() const
Returns the areic number in units per square inch.
bool operator==(const AreicNumber &other) const
float inMilliUnitsPerSquareMeter() const
Returns the areic number in milli-units per square meter.
float inMegaUnitsPerSquareMeter() const
Returns the areic number in Mega-units per square meter.
float inUnitsPerSquareCentimeter() const
Returns the areic number in units per square centimeter.
AreicNumber()
Creates an areic number object representing an 'unknown' areic number.
friend AreicNumber AreicNumberInUnitsPerSquareMeter(float)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
bool operator<(const AreicNumber &other) const
AreicNumber & operator/=(float div)
float inUnitsPerSquareKilometer() const
Returns the areic number in units per square kilometer.
float inKiloUnitsPerSquareMeter() const
Returns the areic number in kilo-units per square meter.
float inUnitsPerSquareMillimeter() const
Returns the areic number in units per square millimeter.
float inMicroUnitsPerSquareMeter() const
Returns the areic number in micro-units per square meter.
float inUnitsPerSquareFoot() const
Returns the areic number in units per square foot.
float inUnitsPerSquareMeter() const
Returns the areic number in units per square meter.
float inGigaUnitsPerSquareMeter() const
Returns the areic number in GigaUnitsPerSquareMeter.
AreicNumber & operator*=(float multi)
bool operator>=(const AreicNumber &other) const
bool isUnknown() const
Returns whether the object represents an unknown areic number.
bool operator<=(const AreicNumber &other) const
float inUnitsPerSquareYard() const
Returns the areic number in units per square yard.
bool operator>(const AreicNumber &other) const
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...
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
AreicNumber UnknownAreicNumber()
Returns a areic number object representing an unknown areic number.
AreicNumber AreicNumberInGigaUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in giga-units per sq...
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
AreicNumber AreicNumberInUnitsPerSquareFoot(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
AreicNumber AreicNumberInKiloUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in kilo-units per sq...
Area AreaInSquareMeters(float area)
Returns a area object equivalent to the specified area expressed in square meters.
Definition area.h:133
AreicNumber AreicNumberInUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
AreicNumber AreicNumberInUnitsPerSquareYard(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
AreicNumber AreicNumberInUnitsPerSquareCentimeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
LineicNumber LineicNumberInUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per meter...
AreicNumber AreicNumberInUnitsPerSquareMillimeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
AreicNumber AreicNumberInMegaUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in mega-units per sq...
AreicNumber AreicNumberInMilliUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in milli-units per s...
AreicNumber AreicNumberInUnitsPerSquareKilometer(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
Area operator/(Area a, float b)
Definition area.h:191
Area operator*(Area a, float b)
Definition area.h:183
AreicNumber AreicNumberInUnitsPerSquareInch(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in units per square ...
AreicNumber AreicNumberInMicroUnitsPerSquareMeter(float areic_number)
Returns a areic number object equivalent to the specified areic number expressed in micro-units per s...