roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
area.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 area, internally stored as floating-point square meters.
20class Area {
21 public:
22 /// Creates a area object representing an 'unknown' area.
23 Area() : area_(std::nanf("")) {}
24
25 /// Returns the area in square kilometers.
26 float inSquareKilometers() const { return area_ * 0.000001f; }
27
28 /// Returns the area in hectares.
29 float inHectares() const { return area_ * 0.00001f; }
30
31 /// Returns the area in ares.
32 float inAres() const { return area_ * 0.01f; }
33
34 /// Returns the area in square meters.
35 float inSquareMeters() const { return area_; }
36
37 /// Returns the area in square decimeters.
38 float inSquareDecimeters() const { return area_ * 100.0f; }
39
40 /// Returns the area in square centimeters.
41 float inSquareCentimeters() const { return area_ * 10000.0f; }
42
43 /// Returns the area in square millimeters.
44 float inSquareMillimeters() const { return area_ * 1000000.0f; }
45
46 /// Returns the area in square micrometers.
47 float inSquareMicrometers() const { return area_ * 1000000000000.0f; }
48
49 /// Returns the area in acres.
50 float inAcres() const { return area_ * 0.000247105f; }
51
52 /// Returns the area in square inches.
53 float inSquareInches() const { return area_ * 1550.0031f; }
54
55 /// Returns whether the object represents an unknown area.
56 bool isUnknown() const { return std::isnan(area_); }
57
58 bool operator<(const Area &other) const { return area_ < other.area_; }
59
60 bool operator==(const Area &other) const { return area_ == other.area_; }
61
62 bool operator>(const Area &other) const { return other.area_ < area_; }
63
64 bool operator<=(const Area &other) const { return !(other.area_ < area_); }
65
66 bool operator>=(const Area &other) const { return !(area_ < other.area_); }
67
68 bool operator!=(const Area &other) const { return !(area_ == other.area_); }
69
70 inline Area &operator+=(const Area &other) {
71 area_ += other.inSquareMeters();
72 return *this;
73 }
74
75 inline Area &operator-=(const Area &other) {
76 area_ -= other.inSquareMeters();
77 return *this;
78 }
79
80 inline Area &operator*=(float multi) {
81 area_ *= multi;
82 return *this;
83 }
84
85 inline Area &operator/=(float div) {
86 area_ /= div;
87 return *this;
88 }
89
90#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
91 /// Returns the string representation of the area.
92 std::string asString() const;
93#endif
94
95#if defined(ARDUINO)
96 String asArduinoString() const;
97#endif
98
99 private:
100 friend Area UnknownArea();
101
102 friend Area AreaInSquareMeters(float);
103
104 explicit Area(float area) : area_(area) {}
105
106 /// Stored in square meters.
107 float area_;
108};
109
110inline Area AreaInSquareMeters(float area);
111
112/// Returns a area object representing an unknown area.
113inline Area UnknownArea() { return Area(); }
114
115/// Returns a area object equivalent to the specified area
116/// expressed in square kilometers.
117inline Area AreaInSquareKilometers(float area) {
118 return AreaInSquareMeters(area * 1000000.0f);
119}
120
121/// Returns a area object equivalent to the specified area
122/// expressed in hectares.
123inline Area AreaInHectares(float area) {
124 return AreaInSquareMeters(area * 10000.0f);
125}
126
127/// Returns a area object equivalent to the specified area
128/// expressed in ares.
129inline Area AreaInAres(float area) { return AreaInSquareMeters(area * 100.0f); }
130
131/// Returns a area object equivalent to the specified area
132/// expressed in square meters.
133inline Area AreaInSquareMeters(float area) { return Area(area); }
134
135/// Returns a area object equivalent to the specified area
136/// expressed in square decimeters.
137inline Area AreaInSquareDecimeters(float area) {
138 return AreaInSquareMeters(area * 0.01f);
139}
140
141/// Returns a area object equivalent to the specified area
142/// expressed in square centimeters.
143inline Area AreaInSquareCentimeters(float area) {
144 return AreaInSquareMeters(area * 0.0001f);
145}
146
147/// Returns a area object equivalent to the specified area
148/// expressed in square millimeters.
149inline Area AreaInSquareMillimeters(float area) {
150 return AreaInSquareMeters(area * 0.000001f);
151}
152
153/// Returns a area object equivalent to the specified area
154/// expressed in square micrometers.
155inline Area AreaInSquareMicrometers(float area) {
156 return AreaInSquareMeters(area * 0.000000000001f);
157}
158
159/// Returns a area object equivalent to the specified area
160/// expressed in acres.
161inline Area AreaInAcres(float area) {
162 return AreaInSquareMeters(area * 4046.86f);
163}
164
165/// Returns a area object equivalent to the specified area
166/// expressed in acres.
167inline Area AreaInSquareInches(float area) {
168 return AreaInSquareMeters(area * 0.00064516f);
169}
170
171inline Area operator+(Area a, Area b) {
173}
174
175inline Area operator-(Area a, Area b) {
177}
178
179inline Area operator-(Area a) {
181}
182
183inline Area operator*(Area a, float b) {
184 return AreaInSquareMeters(a.inSquareMeters() * b);
185}
186
187inline Area operator*(float a, Area b) {
188 return AreaInSquareMeters(a * b.inSquareMeters());
189}
190
191inline Area operator/(Area a, float b) {
192 return AreaInSquareMeters(a.inSquareMeters() / b);
193}
194
195inline float operator/(Area a, Area b) {
196 return a.inSquareMeters() / b.inSquareMeters();
197}
198
200 return AreaInSquareMeters(a.inMeters() * b.inMeters());
201}
202
204 return LengthInMeters(a.inSquareMeters() / b.inMeters());
205}
206
207roo_logging::Stream &operator<<(roo_logging::Stream &os, const Area &val);
208
209} // namespace roo_quantity
Representation of area, internally stored as floating-point square meters.
Definition area.h:20
float inSquareMillimeters() const
Returns the area in square millimeters.
Definition area.h:44
bool operator<=(const Area &other) const
Definition area.h:64
float inSquareCentimeters() const
Returns the area in square centimeters.
Definition area.h:41
float inHectares() const
Returns the area in hectares.
Definition area.h:29
bool operator<(const Area &other) const
Definition area.h:58
bool operator>(const Area &other) const
Definition area.h:62
Area & operator-=(const Area &other)
Definition area.h:75
float inAcres() const
Returns the area in acres.
Definition area.h:50
friend Area UnknownArea()
Returns a area object representing an unknown area.
Definition area.h:113
float inAres() const
Returns the area in ares.
Definition area.h:32
bool isUnknown() const
Returns whether the object represents an unknown area.
Definition area.h:56
Area & operator+=(const Area &other)
Definition area.h:70
Area & operator*=(float multi)
Definition area.h:80
bool operator>=(const Area &other) const
Definition area.h:66
Area()
Creates a area object representing an 'unknown' area.
Definition area.h:23
float inSquareKilometers() const
Returns the area in square kilometers.
Definition area.h:26
float inSquareMeters() const
Returns the area in square meters.
Definition area.h:35
Area & operator/=(float div)
Definition area.h:85
friend Area AreaInSquareMeters(float)
Returns a area object equivalent to the specified area expressed in square meters.
Definition area.h:133
bool operator==(const Area &other) const
Definition area.h:60
bool operator!=(const Area &other) const
Definition area.h:68
float inSquareInches() const
Returns the area in square inches.
Definition area.h:53
float inSquareDecimeters() const
Returns the area in square decimeters.
Definition area.h:38
float inSquareMicrometers() const
Returns the area in square micrometers.
Definition area.h:47
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
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
Length LengthInMeters(float length)
Returns a length object equivalent to the specified length expressed in meters.
Definition length.h:133
Area AreaInSquareMillimeters(float area)
Returns a area object equivalent to the specified area expressed in square millimeters.
Definition area.h:149
roo_logging::Stream & operator<<(roo_logging::Stream &os, const Area &val)
Definition area.cpp:57
Area AreaInSquareCentimeters(float area)
Returns a area object equivalent to the specified area expressed in square centimeters.
Definition area.h:143
Area AreaInHectares(float area)
Returns a area object equivalent to the specified area expressed in hectares.
Definition area.h:123
Area AreaInSquareMeters(float area)
Returns a area object equivalent to the specified area expressed in square meters.
Definition area.h:133
Area UnknownArea()
Returns a area object representing an unknown area.
Definition area.h:113
Area AreaInSquareKilometers(float area)
Returns a area object equivalent to the specified area expressed in square kilometers.
Definition area.h:117
Area operator+(Area a, Area b)
Definition area.h:171
Area AreaInSquareDecimeters(float area)
Returns a area object equivalent to the specified area expressed in square decimeters.
Definition area.h:137
Area AreaInAcres(float area)
Returns a area object equivalent to the specified area expressed in acres.
Definition area.h:161
Area operator-(Area a, Area b)
Definition area.h:175
Area AreaInSquareMicrometers(float area)
Returns a area object equivalent to the specified area expressed in square micrometers.
Definition area.h:155
Area AreaInSquareInches(float area)
Returns a area object equivalent to the specified area expressed in acres.
Definition area.h:167
Area AreaInAres(float area)
Returns a area object equivalent to the specified area expressed in ares.
Definition area.h:129
Area operator/(Area a, float b)
Definition area.h:191
Area operator*(Area a, float b)
Definition area.h:183