roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
pressure.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"
10
11#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
12#include <string>
13#endif
14
15#if defined(ARDUINO)
16#include <Arduino.h>
17#endif
18
19namespace roo_quantity {
20
21/// Representation of pressure, internally stored as floating-point Pascals.
22class Pressure {
23 public:
24 /// Creates a pressure object representing an 'unknown' pressure.
25 Pressure() : pressure_(std::nanf("")) {}
26
27 /// Returns the pressure in GigaPascals.
28 float inGigaPascals() const { return pressure_ * 0.000000001f; }
29
30 /// Returns the pressure in MegaPascals.
31 float inMegaPascals() const { return pressure_ * 0.000001f; }
32
33 /// Returns the pressure in bars.
34 float inBars() const { return pressure_ * 0.00001f; }
35
36 /// Returns the pressure in kiloPascals.
37 float inKiloPascals() const { return pressure_ * 0.001f; }
38
39 /// Returns the pressure in HectoPascals.
40 float inHectoPascals() const { return pressure_ * 0.01f; }
41
42 /// Returns the pressure in Pascals.
43 float inPascals() const { return pressure_; }
44
45 /// Returns the pressure in milliPascals.
46 float inMilliPascals() const { return pressure_ * 1000.0f; }
47
48 /// Returns the pressure in microPascals.
49 float inMicroPascals() const { return pressure_ * 1000000.0f; }
50
51 /// Returns the pressure in PSI (pound per square inch).
52 float inPSI() const { return pressure_ * 0.0001450377f; }
53
54 /// Returns whether the object represents an unknown pressure.
55 bool isUnknown() const { return std::isnan(pressure_); }
56
57 bool operator<(const Pressure& other) const {
58 return pressure_ < other.pressure_;
59 }
60
61 bool operator==(const Pressure& other) const {
62 return pressure_ == other.pressure_;
63 }
64
65 bool operator>(const Pressure& other) const {
66 return other.pressure_ < pressure_;
67 }
68
69 bool operator<=(const Pressure& other) const {
70 return !(other.pressure_ < pressure_);
71 }
72
73 bool operator>=(const Pressure& other) const {
74 return !(pressure_ < other.pressure_);
75 }
76
77 bool operator!=(const Pressure& other) const {
78 return !(pressure_ == other.pressure_);
79 }
80
81 inline Pressure& operator+=(const Pressure& other) {
82 pressure_ += other.inPascals();
83 return *this;
84 }
85
86 inline Pressure& operator-=(const Pressure& other) {
87 pressure_ -= other.inPascals();
88 return *this;
89 }
90
91 inline Pressure& operator*=(float multi) {
92 pressure_ *= multi;
93 return *this;
94 }
95
96 inline Pressure& operator/=(float div) {
97 pressure_ /= div;
98 return *this;
99 }
100
101#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
102 /// Returns the string representation of the pressure.
103 std::string asString() const;
104#endif
105
106#if defined(ARDUINO)
107 String asArduinoString() const;
108#endif
109
110 private:
111 friend Pressure UnknownPressure();
112
113 friend Pressure PressureInPascals(float);
114
115 explicit Pressure(float pressure) : pressure_(pressure) {}
116
117 /// Stored in Pascals.
118 float pressure_;
119};
120
121inline Pressure PressureInPascals(float pressure);
122
123/// Returns a pressure object representing an unknown pressure.
124inline Pressure UnknownPressure() { return Pressure(); }
125
126/// Returns a pressure object equivalent to the specified pressure
127/// expressed in GigaPascals.
128inline Pressure PressureInGigaPascals(float pressure) {
129 return PressureInPascals(pressure * 1000000000.0f);
130}
131
132/// Returns a pressure object equivalent to the specified pressure
133/// expressed in MegaPascals.
134inline Pressure PressureInMegaPascals(float pressure) {
135 return PressureInPascals(pressure * 1000000.0f);
136}
137
138/// Returns a pressure object equivalent to the specified pressure
139/// expressed in bars.
140inline Pressure PressureInBars(float pressure) {
141 return PressureInPascals(pressure * 100000.0f);
142}
143
144/// Returns a pressure object equivalent to the specified pressure
145/// expressed in kiloPascals.
146inline Pressure PressureInKiloPascals(float pressure) {
147 return PressureInPascals(pressure * 1000.0f);
148}
149
150/// Returns a pressure object equivalent to the specified pressure
151/// expressed in hectoPascals.
152inline Pressure PressureInHectoPascals(float pressure) {
153 return PressureInPascals(pressure * 100.0f);
154}
155
156/// Returns a pressure object equivalent to the specified pressure
157/// expressed in Pascals.
158inline Pressure PressureInPascals(float pressure) { return Pressure(pressure); }
159
160/// Returns a pressure object equivalent to the specified pressure
161/// expressed in milliPascals.
162inline Pressure PressureInMilliPascals(float pressure) {
163 return PressureInPascals(pressure * 0.001f);
164}
165
166/// Returns a pressure object equivalent to the specified pressure
167/// expressed in microPascals.
168inline Pressure PressureInMicroPascals(float pressure) {
169 return PressureInPascals(pressure * 0.000001f);
170}
171
172/// Returns a pressure object equivalent to the specified pressure
173/// expressed in PSI (pounds per square inch).
174inline Pressure PressureInPSI(float pressure) {
175 return PressureInPascals(pressure * 6894.7572932f);
176}
177
179 return PressureInPascals(a.inPascals() + b.inPascals());
180}
181
183 return PressureInPascals(a.inPascals() - b.inPascals());
184}
185
187 return PressureInPascals(-a.inPascals());
188}
189
190inline Pressure operator*(Pressure a, float b) {
191 return PressureInPascals(a.inPascals() * b);
192}
193
194inline Pressure operator*(float a, Pressure b) {
195 return PressureInPascals(a * b.inPascals());
196}
197
198inline Pressure operator/(Pressure a, float b) {
199 return PressureInPascals(a.inPascals() / b);
200}
201
202inline float operator/(Pressure a, Pressure b) {
203 return a.inPascals() / b.inPascals();
204}
205
208}
209
213
214roo_logging::Stream& operator<<(roo_logging::Stream& os, const Pressure& val);
215
216} // 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...
float inUnitsPerSquareMeter() const
Returns the areic number in units per square meter.
Representation of force, internally stored as floating-point Newtons.
Definition force.h:22
float inNewtons() const
Returns the force in Newtons.
Definition force.h:31
Representation of pressure, internally stored as floating-point Pascals.
Definition pressure.h:22
float inHectoPascals() const
Returns the pressure in HectoPascals.
Definition pressure.h:40
float inMilliPascals() const
Returns the pressure in milliPascals.
Definition pressure.h:46
float inMicroPascals() const
Returns the pressure in microPascals.
Definition pressure.h:49
float inBars() const
Returns the pressure in bars.
Definition pressure.h:34
float inKiloPascals() const
Returns the pressure in kiloPascals.
Definition pressure.h:37
Pressure()
Creates a pressure object representing an 'unknown' pressure.
Definition pressure.h:25
bool operator>=(const Pressure &other) const
Definition pressure.h:73
float inMegaPascals() const
Returns the pressure in MegaPascals.
Definition pressure.h:31
float inPascals() const
Returns the pressure in Pascals.
Definition pressure.h:43
bool operator==(const Pressure &other) const
Definition pressure.h:61
Pressure & operator-=(const Pressure &other)
Definition pressure.h:86
friend Pressure PressureInPascals(float)
Returns a pressure object equivalent to the specified pressure expressed in Pascals.
Definition pressure.h:158
bool operator!=(const Pressure &other) const
Definition pressure.h:77
Pressure & operator+=(const Pressure &other)
Definition pressure.h:81
friend Pressure UnknownPressure()
Returns a pressure object representing an unknown pressure.
Definition pressure.h:124
Pressure & operator/=(float div)
Definition pressure.h:96
bool operator<(const Pressure &other) const
Definition pressure.h:57
float inPSI() const
Returns the pressure in PSI (pound per square inch).
Definition pressure.h:52
float inGigaPascals() const
Returns the pressure in GigaPascals.
Definition pressure.h:28
bool isUnknown() const
Returns whether the object represents an unknown pressure.
Definition pressure.h:55
Pressure & operator*=(float multi)
Definition pressure.h:91
bool operator<=(const Pressure &other) const
Definition pressure.h:69
bool operator>(const Pressure &other) const
Definition pressure.h:65
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
Pressure PressureInKiloPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in kiloPascals.
Definition pressure.h:146
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
Pressure PressureInPSI(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in PSI (pounds per square in...
Definition pressure.h:174
Pressure PressureInHectoPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in hectoPascals.
Definition pressure.h:152
Area operator+(Area a, Area b)
Definition area.h:171
Pressure PressureInGigaPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in GigaPascals.
Definition pressure.h:128
Area operator-(Area a, Area b)
Definition area.h:175
Pressure PressureInBars(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in bars.
Definition pressure.h:140
Pressure PressureInPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in Pascals.
Definition pressure.h:158
Pressure PressureInMegaPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in MegaPascals.
Definition pressure.h:134
Pressure PressureInMilliPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in milliPascals.
Definition pressure.h:162
Pressure PressureInMicroPascals(float pressure)
Returns a pressure object equivalent to the specified pressure expressed in microPascals.
Definition pressure.h:168
Area operator/(Area a, float b)
Definition area.h:191
Area operator*(Area a, float b)
Definition area.h:183
Pressure UnknownPressure()
Returns a pressure object representing an unknown pressure.
Definition pressure.h:124