roo_quantity
API Documentation for roo_quantity
Loading...
Searching...
No Matches
area.cpp
Go to the documentation of this file.
1#include "roo_quantity/area.h"
2
3namespace roo_quantity {
4namespace {
5
6void AreaToString(const Area& val, char* out, int maxlen) {
7 if (val.isUnknown()) {
8 strncpy(out, "? m²", maxlen);
9 } else {
10 const char* format;
11 float num;
12 if (val > AreaInSquareKilometers(1.0f)) {
13 format = "%g km²";
14 num = val.inSquareKilometers();
15 } else if (val > AreaInHectares(1.0f)) {
16 format = "%g ha";
17 num = val.inHectares();
18 } else if (val > AreaInSquareMeters(1.0f)) {
19 format = "%g m²";
20 num = val.inSquareMeters();
21 } else if (val > AreaInSquareDecimeters(1.0f)) {
22 format = "%g dm²";
23 num = val.inSquareDecimeters();
24 } else if (val > AreaInSquareMillimeters(1.0f)) {
25 format = "%g mm²";
26 num = val.inSquareMillimeters();
27 } else {
28 format = "%g µm²";
29 num = val.inSquareMicrometers();
30 }
31 snprintf(out, maxlen, format, num);
32 }
33}
34
35} // namespace
36
37#if defined(ESP32) || defined(ESP8266) || defined(__linux__)
38
39std::string Area::asString() const {
40 char out[16];
41 AreaToString(*this, out, 16);
42 return out;
43}
44
45#endif
46
47#if defined(ARDUINO)
48
49String Area::asArduinoString() const {
50 char out[16];
51 AreaToString(*this, out, 16);
52 return out;
53}
54
55#endif
56
57roo_logging::Stream& operator<<(roo_logging::Stream& os, const Area& val) {
58 char out[16];
59 AreaToString(val, out, 16);
60 os << out;
61 return os;
62}
63
64} // 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
float inHectares() const
Returns the area in hectares.
Definition area.h:29
bool isUnknown() const
Returns whether the object represents an unknown area.
Definition area.h:56
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
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
For convenience conversion from roo_time::Duration.
Definition area.cpp:3
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 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 AreaInSquareKilometers(float area)
Returns a area object equivalent to the specified area expressed in square kilometers.
Definition area.h:117
Area AreaInSquareDecimeters(float area)
Returns a area object equivalent to the specified area expressed in square decimeters.
Definition area.h:137