Units and unit systems
Unit definitions, system registries, conversion, and available-unit lists.
-
enum class snt::puq::Utype : std::uint8_t
Values:
-
enumerator NUL
empty flag
-
enumerator BAS
base units
-
enumerator LIN
standard unit (linear conversion)
-
enumerator LOG
logarithmic unit
-
enumerator TMP
temperature unit
-
enumerator CST
constant
-
enumerator CSB
base constant
-
enumerator QUA
quantity
-
enumerator CUS
custom unit
-
enumerator NUL
-
enum class snt::puq::SystemType
Values:
-
enumerator SI
International system of units.
-
enumerator ESU
Electrostatic CGS system of units.
-
enumerator GU
Gauss CGS sytem of units.
-
enumerator EMU
Electromagnetic CGS system of units.
-
enumerator IU
Imperial units.
-
enumerator US
United States customary system of units.
-
enumerator AU
Atomic system of units.
-
enumerator PU
Planck system of units.
-
enumerator SRU
Units for special relativity.
-
enumerator GRU
Units for general relativity.
-
enumerator GEO
Geometrized units.
-
enumerator COUNT
Number of units systems.
-
enumerator NONE
No unit system selected.
-
enumerator SI
-
using snt::puq::BaseDimensions = std::array<ExponentVariant, Config::num_basedim>
-
using snt::puq::AllowedPrefixes = std::set<std::string>
-
using snt::puq::UnitListType = std::unordered_map<std::string, UnitStruct>
-
using snt::puq::DimensionMapType = std::unordered_map<std::string, DimensionStruct>
-
const std::unordered_map<std::string, UnitPrefixStruct> snt::puq::UnitPrefixList
-
const std::vector<std::string> snt::puq::UnitPrefixOrder
-
std::unordered_map<SystemType, SystemDataType*> snt::puq::SystemMap
Forward definition of the SystemType list.
Map of sytem types and corresponding pointers to the system data structures
-
std::unordered_map<SystemType, SystemDataType> snt::puq::CustomSystemMap
Map of custom units for each unit system.
-
std::string snt::puq::table_header(std::string title, std::vector<std::string> header, std::vector<int> width)
-
inline Utype snt::puq::operator|(Utype lhs, Utype rhs)
Combine two unit-system flags.
- Parameters:
lhs – Left-hand operand or flag set.
rhs – Right-hand operand or flag set.
-
inline Utype snt::puq::operator&(Utype lhs, Utype rhs)
Intersect two unit-system flags.
- Parameters:
lhs – Left-hand operand or flag set.
rhs – Right-hand operand or flag set.
-
inline Utype snt::puq::operator^(Utype lhs, Utype rhs)
Compute the symmetric difference of two unit-system flags.
- Parameters:
lhs – Left-hand operand or flag set.
rhs – Right-hand operand or flag set.
-
class BaseUnit
- #include <base_units.h>
One base unit, including an optional prefix and exponent.
Public Functions
-
BaseUnit() = default
-
inline BaseUnit(const int &n)
Construct an unnamed unit factor with an integer exponent.
- Parameters:
n – Integer exponent stored in the factor.
-
inline BaseUnit(const int &n, const int &d)
Construct a base unit with a rational exponent.
-
inline BaseUnit(const std::string &p, const std::string &u, const ExponentVariant &e)
Construct a base unit from a prefix, symbol, and exponent.
- Parameters:
p – Unit prefix, such as
k.u – Unit symbol.
e – Unit exponent.
-
inline BaseUnit(const std::string &p, const std::string &u, const int &n, const int &d)
Construct a base unit from a prefix, symbol, and rational exponent.
-
std::string to_string(const UnitFormat &format = UnitFormat())
Format the object as text.
- Parameters:
format – Formatting options controlling the textual representation.
Public Members
-
std::string prefix
Unit prefix, such as k or m.
-
std::string unit
Unit symbol.
-
ExponentVariant exponent
Unit exponent.
-
BaseUnit() = default
-
class BaseUnits
- #include <base_units.h>
Ordered collection of base units representing a unit expression.
Public Functions
-
BaseUnits() = default
-
BaseUnits(const std::string &s)
Parse a unit expression into base-unit factors.
- Parameters:
s – Unit expression to parse.
-
inline BaseUnits(const BaseUnits::ListType &bu)
Construct a collection from existing base-unit factors.
- Parameters:
bu – Factors to copy.
-
void append(const BaseUnit &bu)
Append a unit factor, combining it with an existing matching factor.
- Parameters:
bu – Unit factor to append; a resulting zero exponent removes the factor.
-
void append(const std::string &p, const std::string &u, ExponentVariant e)
Append a factor with an exponent variant.
- Parameters:
p – Unit prefix.
u – Unit symbol.
e – Integer or rational exponent.
-
void append(const std::string &p, const std::string &u, int n, int d)
Append a factor with a rational exponent.
-
std::string to_string(const UnitFormat &format = UnitFormat()) const
Format the complete unit expression.
-
const BaseUnit &operator[](int index) const
Access the item at the requested key or index.
- Parameters:
index – Zero-based element index.
-
void operator*=(const BaseUnits &bu)
Multiply by the right-hand value in place.
- Parameters:
bu – Base units associated with the value.
-
void operator/=(const BaseUnits &bu)
Divide by the right-hand value in place.
- Parameters:
bu – Base units associated with the value.
-
std::size_t size() const
Return the number of unit factors.
-
bool has_dimensions() const
Test whether any factor carries dimensions.
-
Dimensions dimensions() const
Calculate the combined dimensions.
-
BaseUnits() = default
-
class Converter
- #include <converter.h>
Converts values between two compatible unit expressions.
The converter is created with source and target units. Linear, logarithmic, and temperature conversions are selected from those unit definitions. A conversion with incompatible dimensions raises
ConverterException.Public Functions
-
inline Converter()
-
Converter(const BaseUnits &bu1, const BaseUnits &bu2)
Construct a converter between two explicit unit expressions.
- Parameters:
bu1 – Source units.
bu2 – Target units; must have compatible dimensions with
bu1.
-
inline Converter(const std::string &s1, const std::string &s2)
Construct a converter by parsing source and target unit expressions.
- Parameters:
s1 – Source unit expression.
s2 – Target unit expression.
-
Result convert(const Result &m1, const Result &m2 = 1)
Convert a result from the source units to the target units.
- Parameters:
m1 – Value (and optional uncertainty) to convert.
m2 – Context value required by contextual conversion rules; defaults to one.
- Returns:
Converted result with uncertainty propagated through the conversion.
-
inline Converter()
-
class ConverterException : public snt::puq::Exception
- #include <converter.h>
Public Functions
-
inline ConverterException(const BaseUnits &bu1, const BaseUnits &bu2, const std::string &file, size_t line)
-
inline ConverterException(const BaseUnits &bu1, const SystemType &s1, const BaseUnits &bu2, const SystemType &s2, const std::string &file, const size_t line)
-
inline core::ExceptionInfo prepare_info(const BaseUnits &bu1, const SystemType &s1, const BaseUnits &bu2, const SystemType &s2, const std::string &file, const size_t line)
-
inline ConverterException(const BaseUnits &bu1, const BaseUnits &bu2, const std::string &file, size_t line)
-
class DimensionMapExcept : public std::exception
- #include <systems.h>
-
struct DimensionStruct
- #include <systems.h>
-
struct SystemDataType
- #include <systems.h>
Public Members
-
std::string SystemAbbrev
-
std::string SystemName
-
UnitListType UnitList
-
QuantityListType QuantityList
-
DimensionMapType DimensionMap
-
std::string SystemAbbrev
-
struct UnitPrefixStruct
- #include <systems.h>
-
struct UnitStruct
- #include <systems.h>
-
class UnitSystem
- #include <unit_system.h>
Manages a pointer to the central unit-system registry (
current).The pointer may reference any unit system registered in
SystemMap. When aUnitSysteminstance is opened, the pointer is redirected to the selected unit-system data, while the previously active registry pointer is pushed ontostack.Multiple
UnitSysteminstances may be open simultaneously. In that case, they must be closed in the reverse order in which they were opened (LIFO order). Each open operation pushes a new entry ontostack, and each close operation restores the previous registry by popping the corresponding entry from the stack.Public Functions
-
UnitSystem(const SystemType st = SystemType::NONE)
Constructor of the UnitSystem class
- Parameters:
st – Unit system type
-
~UnitSystem()
Destructor of the UnitSystem class
-
void change(const SystemType st)
Change currently openned unit system
- Parameters:
st – New unit system type
-
void close()
Close the currently openned unit system
-
const std::string to_string() const
String representation of this class
- Returns:
String representation
Public Static Functions
-
static size_t set_custom_unit(const std::string &name, const std::string &definition)
Set a custom unit into the current unit system record
- Parameters:
name – Unit name
definition – Defining unit expression
- Returns:
Current stack number
-
struct Record
- #include <unit_system.h>
Holds record of an openned unit system
-
UnitSystem(const SystemType st = SystemType::NONE)
-
constexpr int snt::puq::Config::num_basedim
Number of base dimensions.
-
constexpr bool snt::puq::Config::use_units_temperature
Use temperature units.
-
constexpr bool snt::puq::Config::use_units_logarithmic
Use logarithmic units.
-
constexpr bool snt::puq::Config::use_system_cgs
Use CGS systems of units.
-
constexpr bool snt::puq::Config::use_system_nus
Use natural systems of units.
-
constexpr bool snt::puq::Config::use_system_eus
Use english system of units.
-
constexpr bool snt::puq::Config::preprocess_system
Preprocess system prefix in quantity expressions.
-
constexpr bool snt::puq::Config::preprocess_symbols
Preprocess special symbols in quantity expressions.
-
constexpr bool snt::puq::Config::debug_unit_solver
Switch on debugging diagnostics for UnitSolver.
-
constexpr bool snt::puq::Config::debug_calculator
Switch on debugging diagnostics for Calculator.
-
std::string snt::puq::lists::unit_systems(const bool json = false)
-
std::string snt::puq::lists::prefixes(const bool json = false, const UnitFormat &format = UnitFormat())
-
std::string snt::puq::lists::base_units(const bool json = false, const UnitFormat &format = UnitFormat())
-
std::string snt::puq::lists::derived_units(const bool json = false, const UnitFormat &format = UnitFormat())
-
std::string snt::puq::lists::constants(const bool json = false, const UnitFormat &format = UnitFormat())
-
std::string snt::puq::lists::quantities(const bool json = false, const UnitFormat &format = UnitFormat())
-
std::string snt::puq::lists::temperature_units(const bool json = false)
-
std::string snt::puq::lists::logarithmic_units(const bool json = false)
-
constexpr std::string_view snt::puq::Symbols::plus
Symbol plus +.
-
constexpr std::string_view snt::puq::Symbols::minus
Symbol minus -.
-
constexpr std::string_view snt::puq::Symbols::minus2
Symbol minus −
-
constexpr std::string_view snt::puq::Symbols::multiply
Symbol multiplication *.
-
constexpr std::string_view snt::puq::Symbols::multiply2
Symbol multiplication ⋅
-
constexpr std::string_view snt::puq::Symbols::divide
Symbol division /.
-
constexpr std::string_view snt::puq::Symbols::power
Symbol power ^.
-
constexpr std::string_view snt::puq::Symbols::exponent
Symbol exponent e.
-
constexpr std::string_view snt::puq::Symbols::exponent2
Symbol exponent ×10.
-
constexpr std::string_view snt::puq::Symbols::fraction_separator
Separator in an exponent fraction (e.g. m3:2)
-
constexpr std::string_view snt::puq::Symbols::system_separator
Separator of an unit system in expressions (e.g. SI_m)
-
constexpr std::string_view snt::puq::Symbols::quantity_start
Starting symbol of a physical quantity unit (e.g. )
-
constexpr std::string_view snt::puq::Symbols::quantity_end
Ending symbol of a physical quantity unit.
-
constexpr std::string_view snt::puq::Symbols::si_factor_start
Starting symbol of an SI conversion factor (e.g. |A|)
-
constexpr std::string_view snt::puq::Symbols::si_factor_end
Ending symbol of an SI conversion factor.
-
SystemDataType snt::puq::SystemData::SI
International system of units.
-
SystemDataType snt::puq::SystemData::ESU
Electrostatic CGS system of units.
-
SystemDataType snt::puq::SystemData::EMU
Electromagnetic CGS system of units.
-
SystemDataType snt::puq::SystemData::GU
Gauss CGS sytem of units.
-
SystemDataType snt::puq::SystemData::IU
Imperial units.
-
SystemDataType snt::puq::SystemData::US
United States customary system of units.
-
SystemDataType snt::puq::SystemData::AU
Atomic system of units.
-
SystemDataType snt::puq::SystemData::PU
Planck system of units.
-
SystemDataType snt::puq::SystemData::SRU
Units for special relativity.
-
SystemDataType snt::puq::SystemData::GRU
Units for general relativity.
-
SystemDataType snt::puq::SystemData::GEO
Geometrized units.