8#ifndef FCF_DEVMGR_COMMON_UNIT_CONVERSION_HPP_
9#define FCF_DEVMGR_COMMON_UNIT_CONVERSION_HPP_
18#include <unordered_map>
21#include <ifw/fnd/defs/iCommAdapter.hpp>
45template<
typename T,
typename Alloc>
58 [](
const auto& v) ->
double
60 using T = std::decay_t<
decltype(v)>;
62 if constexpr (std::is_same_v<T, std::monostate>)
64 throw std::invalid_argument(
"Cannot convert empty variant to double");
66 else if constexpr (std::is_arithmetic_v<T>)
68 return static_cast<double>(v);
72 throw std::invalid_argument(
"Cannot convert vector variant to double");
74 else if constexpr (std::is_same_v<T, std::string>)
76 throw std::invalid_argument(
"Cannot convert string variant to double");
81 throw std::invalid_argument(
82 "Cannot convert non-numeric variant alternative to double");
97 static const std::unordered_map<std::string, UnitInfo> table = {
129 auto it = table.find(std::string(unit));
130 if (it == table.end())
132 throw std::runtime_error(
"Unknown unit: " + std::string(unit));
138 SIValue
to_si(
const ifw::fnd::defs::Value &value, std::string_view unit);
ActionMgr class source file.
Definition actionMgr.cpp:28
const char * si_unit_name(QuantityKind kind)
Definition unitConversion.cpp:36
constexpr bool is_std_vector_v
Definition unitConversion.hpp:49
const char * kind_to_string(QuantityKind kind)
Definition unitConversion.cpp:20
double variant_to_double(const ifw::fnd::defs::Value &value)
Definition unitConversion.hpp:55
SIValue to_si(const ifw::fnd::defs::Value &value, std::string_view unit)
Definition unitConversion.cpp:10
const UnitInfo & lookup_unit(std::string_view unit)
Definition unitConversion.hpp:95
QuantityKind
Definition unitConversion.hpp:29
@ Angle
Definition unitConversion.hpp:31
@ Time
Definition unitConversion.hpp:32
@ Length
Definition unitConversion.hpp:30
@ Empty
Definition unitConversion.hpp:33
Definition unitConversion.hpp:37
QuantityKind kind
Definition unitConversion.hpp:39
double value
Definition unitConversion.hpp:38
Definition unitConversion.hpp:89
double factor
Definition unitConversion.hpp:90
QuantityKind kind
Definition unitConversion.hpp:91
Definition unitConversion.hpp:43