roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
volumic_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"
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 volumic number, a reciprocal of volume, internally
21/// stored as floating-point units per cubic meter.
23 public:
24 /// Creates an volumic number object representing an 'unknown'
25 /// volumic number.
26 VolumicNumber() : volumic_number_(std::nanf("")) {}
27
28 /// Returns the volumic number in GigaUnitsPerCubicMeter.
30 return volumic_number_ * 0.000000001f;
31 }
32
33 /// Returns the volumic number in Mega-units per cubic meter.
34 float inMegaUnitsPerCubicMeter() const { return volumic_number_ * 0.000001f; }
35
36 /// Returns the volumic number in kilo-units per cubic meter.
37 float inKiloUnitsPerCubicMeter() const { return volumic_number_ * 0.001f; }
38
39 /// Returns the volumic number in units per cubic meter.
40 float inUnitsPerCubicMeter() const { return volumic_number_; }
41
42 /// Returns the volumic number in milli-units per cubic meter.
43 float inMilliUnitsPerCubicMeter() const { return volumic_number_ * 1000.0f; }
44
45 /// Returns the volumic number in micro-units per cubic meter.
47 return volumic_number_ * 1000000.0f;
48 }
49
50 /// Returns the volumic number in units per cubic decimeter (liter).
51 float inUnitsPerCubicDecimeter() const { return volumic_number_ * 0.001f; }
52
53 /// Returns the volumic number in units per cubic decimeter (liter).
54 float inUnitsPerLiter() const { return inUnitsPerCubicDecimeter(); }
55
56 /// Returns the volumic number in units per cubic centimeter.
58 return volumic_number_ * 0.000001f;
59 }
60
61 /// Returns the volumic number in units per cubic millimeter.
63 return volumic_number_ * 0.000000001f;
64 }
65
66 /// Returns the volumic number in units per cubic kilometer.
68 return volumic_number_ * 1000000000.0f;
69 }
70
71 /// Returns the volumic number in units per cubic inch.
72 float inUnitsPerCubicInch() const { return volumic_number_ * 1.6387064E-5f; }
73
74 /// Returns the volumic number in units per cubic foot.
75 float inUnitsPerCubicFoot() const { return volumic_number_ * 0.0283168466f; }
76
77 /// Returns the volumic number in units per cubic yard.
78 float inUnitsPerCubicYard() const { return volumic_number_ * 0.764554858f; }
79
80 /// Returns whether the object represents an unknown volumic number.
81 bool isUnknown() const { return std::isnan(volumic_number_); }
82
83 bool operator<(const VolumicNumber &other) const {
84 return volumic_number_ < other.volumic_number_;
85 }
86
87 bool operator==(const VolumicNumber &other) const {
88 return volumic_number_ == other.volumic_number_;
89 }
90
91 bool operator>(const VolumicNumber &other) const {
92 return other.volumic_number_ < volumic_number_;
93 }
94
95 bool operator<=(const VolumicNumber &other) const {
96 return !(other.volumic_number_ < volumic_number_);
97 }
98
99 bool operator>=(const VolumicNumber &other) const {
100 return !(volumic_number_ < other.volumic_number_);
101 }
102
103 bool operator!=(const VolumicNumber &other) const {
104 return !(volumic_number_ == other.volumic_number_);
105 }
106
107 VolumicNumber &operator*=(float multi) {
108 volumic_number_ *= multi;
109 return *this;
110 }
111
113 volumic_number_ /= div;
114 return *this;
115 }
116
117#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
118 /// Returns the string representation of the volumic number.
119 std::string asString() const;
120#endif
121
122#if defined(ARDUINO)
123 String asArduinoString() const;
124#endif
125
126 private:
128
130
131 explicit VolumicNumber(float volumic_number)
132 : volumic_number_(volumic_number) {}
133
134 /// Stored in units per cubic meter.
135 float volumic_number_;
136};
137
138inline VolumicNumber VolumicNumberInUnitsPerCubicMeter(float volumic_number);
139
140/// Returns a volumic number object representing an unknown
141/// volumic number.
143
144/// Returns a volumic number object equivalent to the specified
145/// volumic number expressed in giga-units per cubic meter.
147 float volumic_number) {
148 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000000000.0f);
149}
150
151/// Returns a volumic number object equivalent to the specified
152/// volumic number expressed in mega-units per cubic meter.
154 float volumic_number) {
155 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000000.0f);
156}
157
158/// Returns a volumic number object equivalent to the specified
159/// volumic number expressed in kilo-units per cubic meter.
161 float volumic_number) {
162 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000.0f);
163}
164
165/// Returns a volumic number object equivalent to the specified
166/// volumic number expressed in units per cubic meter.
168 return VolumicNumber(volumic_number);
169}
170
171/// Returns a volumic number object equivalent to the specified
172/// volumic number expressed in milli-units per cubic meter.
174 float volumic_number) {
175 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 0.001f);
176}
177
178/// Returns a volumic number object equivalent to the specified
179/// volumic number expressed in micro-units per cubic meter.
181 float volumic_number) {
182 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 0.000001f);
183}
184
185/// Returns a volumic number object equivalent to the specified
186/// volumic number expressed in units per cubic decimeter (liter).
188 float volumic_number) {
189 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000.0f);
190}
191
192/// Returns a volumic number object equivalent to the specified
193/// volumic number expressed in units per cubic decimeter (liter).
194inline VolumicNumber VolumicNumberInUnitsPerLiter(float volumic_number) {
195 return VolumicNumberInUnitsPerCubicDecimeter(volumic_number);
196}
197
198/// Returns a volumic number object equivalent to the specified
199/// volumic number expressed in units per cubic centimeter.
201 float volumic_number) {
202 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000000.0f);
203}
204
205/// Returns a volumic number object equivalent to the specified
206/// volumic number expressed in units per cubic millimeter.
208 float volumic_number) {
209 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1000000000.0f);
210}
211
212/// Returns a volumic number object equivalent to the specified
213/// volumic number expressed in units per cubic kilometer.
215 float volumic_number) {
216 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 0.000000001f);
217}
218
219/// Returns a volumic number object equivalent to the specified
220/// volumic number expressed in units per cubic inch.
222 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 61023.744094732f);
223}
224
225/// Returns a volumic number object equivalent to the specified
226/// volumic number expressed in units per cubic foot.
228 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 35.3146667215f);
229}
230
231/// Returns a volumic number object equivalent to the specified
232/// volumic number expressed in units per cubic yard.
234 return VolumicNumberInUnitsPerCubicMeter(volumic_number * 1.3079506193f);
235}
236
240
244
245inline float operator*(Volume a, VolumicNumber b) {
246 return a.inCubicMeters() * b.inUnitsPerCubicMeter();
247}
248
249inline float operator*(VolumicNumber a, Volume b) {
250 return a.inUnitsPerCubicMeter() * b.inCubicMeters();
251}
252
256
260
264
267}
268
269inline Volume operator/(float a, VolumicNumber b) {
271}
272
273inline VolumicNumber operator/(float a, Volume b) {
275}
276
277roo_logging::Stream& operator<<(roo_logging::Stream& os,
278 const VolumicNumber& val);
279
280} // 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...
Representation of volume, internally stored as floating-point cubic meters.
Definition volume.h:21
float inCubicMeters() const
Returns the volume in cubic meters.
Definition volume.h:30
Representation of volumic number, a reciprocal of volume, internally stored as floating-point units p...
bool operator>=(const VolumicNumber &other) const
float inUnitsPerCubicYard() const
Returns the volumic number in units per cubic yard.
VolumicNumber()
Creates an volumic number object representing an 'unknown' volumic number.
VolumicNumber & operator/=(float div)
bool isUnknown() const
Returns whether the object represents an unknown volumic number.
bool operator==(const VolumicNumber &other) const
float inUnitsPerCubicFoot() const
Returns the volumic number in units per cubic foot.
bool operator>(const VolumicNumber &other) const
float inMicroUnitsPerCubicMeter() const
Returns the volumic number in micro-units per cubic meter.
float inMegaUnitsPerCubicMeter() const
Returns the volumic number in Mega-units per cubic meter.
float inUnitsPerCubicMeter() const
Returns the volumic number in units per cubic meter.
bool operator<=(const VolumicNumber &other) const
float inMilliUnitsPerCubicMeter() const
Returns the volumic number in milli-units per cubic meter.
bool operator<(const VolumicNumber &other) const
VolumicNumber & operator*=(float multi)
float inUnitsPerCubicMillimeter() const
Returns the volumic number in units per cubic millimeter.
float inGigaUnitsPerCubicMeter() const
Returns the volumic number in GigaUnitsPerCubicMeter.
float inUnitsPerCubicCentimeter() const
Returns the volumic number in units per cubic centimeter.
float inUnitsPerLiter() const
Returns the volumic number in units per cubic decimeter (liter).
friend VolumicNumber VolumicNumberInUnitsPerCubicMeter(float)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
float inUnitsPerCubicDecimeter() const
Returns the volumic number in units per cubic decimeter (liter).
bool operator!=(const VolumicNumber &other) const
float inUnitsPerCubicInch() const
Returns the volumic number in units per cubic inch.
float inUnitsPerCubicKilometer() const
Returns the volumic number in units per cubic kilometer.
friend VolumicNumber UnknownVolumicNumber()
Returns a volumic number object representing an unknown volumic number.
float inKiloUnitsPerCubicMeter() const
Returns the volumic number in kilo-units per cubic meter.
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
VolumicNumber VolumicNumberInKiloUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in kilo-units pe...
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
VolumicNumber VolumicNumberInUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
VolumicNumber VolumicNumberInGigaUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in giga-units pe...
VolumicNumber VolumicNumberInUnitsPerCubicCentimeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
VolumicNumber VolumicNumberInMilliUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in milli-units p...
VolumicNumber VolumicNumberInUnitsPerCubicKilometer(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
Volume VolumeInCubicMeters(float volume)
Returns a volume object equivalent to the specified volume expressed in cubic meters.
Definition volume.h:132
VolumicNumber VolumicNumberInUnitsPerCubicInch(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
VolumicNumber VolumicNumberInUnitsPerLiter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
LineicNumber LineicNumberInUnitsPerMeter(float lineic_number)
Returns a lineic number object equivalent to the specified lineic number expressed in units per meter...
VolumicNumber VolumicNumberInUnitsPerCubicYard(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
Area operator/(Area a, float b)
Definition area.h:191
VolumicNumber VolumicNumberInMegaUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in mega-units pe...
VolumicNumber VolumicNumberInUnitsPerCubicMillimeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
Area operator*(Area a, float b)
Definition area.h:183
VolumicNumber VolumicNumberInUnitsPerCubicDecimeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
VolumicNumber UnknownVolumicNumber()
Returns a volumic number object representing an unknown volumic number.
VolumicNumber VolumicNumberInUnitsPerCubicFoot(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in units per cub...
VolumicNumber VolumicNumberInMicroUnitsPerCubicMeter(float volumic_number)
Returns a volumic number object equivalent to the specified volumic number expressed in micro-units p...