20#include <unordered_map>
60 X1(astronomical_unit, au) \
63 X1(solar_radius, rsol) \
64 X1(earth_radius, rearth) \
65 X1(electron_volt, eV) \
67 X1(british_pint, pint)
70#define XMAC_UNIT_PREFIX \
92 #define X(longname, shortname, value) longname = value, shortname = value,
99 template<
class T, UnitPrefix p>
101 return details::pow_constexpr_fast_inv<p, T>(10, 1e-1);
106 static const std::unordered_map<std::string, UnitPrefix> map_name_to_unit_prefix{
108 #define X(longname, shortname, value) {#longname, longname}, {#shortname, shortname},
116 static const std::unordered_map<UnitPrefix, std::string> map_u_to_name_prefix = {
118 #define X(longname, shortname, value) {shortname, #shortname},
127 map_u_to_name_prefix.find(p);
129 if (
auto search = map_u_to_name_prefix.find(p); search != map_u_to_name_prefix.end()) {
130 return search->second;
133 return "[Unknown Unit prefix name]";
139 map_name_to_unit_prefix.find(p);
141 if (
auto search = map_name_to_unit_prefix.find(p);
142 search != map_name_to_unit_prefix.end()) {
143 return search->second;
146 throw std::invalid_argument(
"this unit prefix name is unknown");
156 #define X1(longname, shortname) longname, shortname = longname,
162 static const std::unordered_map<std::string, UnitName> map_name_to_unit{
164 #define X1(longname, shortname) {#longname, longname}, {#shortname, shortname},
170 static const std::unordered_map<UnitName, std::string> map_u_to_name = {
172 #define X1(longname, shortname) {shortname, #shortname},
181 map_u_to_name.find(p);
183 if (
auto search = map_u_to_name.find(p); search != map_u_to_name.end()) {
184 return search->second;
187 return "[Unknown Unit name]";
193 auto search = map_name_to_unit.find(p);
195 if (search != map_name_to_unit.end()) {
196 return search->second;
199 throw std::invalid_argument(
"this unit name is unknown : " + p);
#define XMAC_UNITS
Definition of all units.
UnitName
List of all units name.
const UnitName unit_from_name(std::string p)
Get the UnitName enum value from a unit name as a string.
const std::string get_unit_name(UnitName p)
Get the unit name for a UnitName enum value.
#define XMAC_UNIT_PREFIX
Definition of all prefixes.
namespace containing the units library
const std::string get_unit_prefix_name(UnitPrefix p)
Get the prefix name for a UnitPrefix enum value.
UnitPrefix
Enum of all prefixes.
constexpr T get_prefix_val()
Get the value of a prefix.
const UnitPrefix unit_prefix_from_name(std::string p)
Get the UnitPrefix enum value from a prefix name as a string.