12#ifndef SST_CORE_FROM_STRING_H
13#define SST_CORE_FROM_STRING_H
22std::enable_if_t<std::is_integral_v<T>, T>
23from_string(
const std::string& input)
25 if constexpr ( std::is_signed_v<T> ) {
26 if constexpr ( std::is_same_v<int, T> ) {
27 return std::stoi(input,
nullptr, 0);
29 else if constexpr ( std::is_same_v<long, T> ) {
30 return std::stol(input,
nullptr, 0);
32 else if constexpr ( std::is_same_v<long long, T> ) {
33 return std::stoll(input,
nullptr, 0);
36 return static_cast<T
>(std::stol(input,
nullptr, 0));
40 if constexpr ( std::is_same_v<bool, T> ) {
42 std::string transform(input);
43 for (
auto& c : transform )
45 if ( transform ==
"true" || transform ==
"t" || transform ==
"yes" || transform ==
"y" ||
46 transform ==
"on" || transform ==
"1" ) {
49 else if ( transform ==
"false" || transform ==
"f" || transform ==
"no" || transform ==
"n" ||
50 transform ==
"off" || transform ==
"0" ) {
54 throw std::invalid_argument(
"from_string: no valid conversion");
57 else if constexpr ( std::is_same_v<unsigned long, T> ) {
58 return std::stoul(input,
nullptr, 0);
60 else if constexpr ( std::is_same_v<unsigned long long, T> ) {
61 return std::stoull(input,
nullptr, 0);
64 return static_cast<T
>(std::stoul(input,
nullptr, 0));
70std::enable_if_t<std::is_floating_point_v<T>, T>
71from_string(
const std::string& input)
73 if constexpr ( std::is_same_v<float, T> ) {
76 else if constexpr ( std::is_same_v<double, T> ) {
79 else if constexpr ( std::is_same_v<long double, T> ) {
88std::enable_if_t<std::is_class_v<T>, T>
89from_string(
const std::string& input)
91 static_assert(std::is_constructible_v<T, std::string>,
92 "ERROR: from_string can only be used with integral and floating point types and with classes that have a "
93 "constructor that takes a single string as input.\n");
98std::enable_if_t<std::is_enum_v<T>, T>
99from_string(
const std::string& input)
101 return static_cast<T
>(from_string<std::underlying_type_t<T>>(input));
107std::enable_if_t<!std::is_enum_v<T>, std::string>
108to_string(
const T& input)
110 if constexpr ( std::is_arithmetic_v<T> )
111 return std::to_string(input);
113 return typeid(T).name();
117std::enable_if_t<std::is_enum_v<T>, std::string>
118to_string(
const T& input)
120 return std::to_string(
static_cast<std::underlying_type_t<T>
>(input));
125to_string(std::string s)