19 #ifndef CONVERSION_FUNCS_HPP
20 #define CONVERSION_FUNCS_HPP
22 #include "valuevar.hpp"
27 template<
typename T,
typename U>
29 throw std::range_error(std::string(
"conversion not defined for array of ") +
33 template<
typename T,
typename U>
35 throw std::range_error(std::string(
"conversion not defined for ") +
111 val::Value value_convert(
const val::Value& x) {
114 return array_convert_from_scalar<T, val::VNull>(get<val::VNull>(x));
116 return array_convert<T, double>(get<val::SpVAD>(x));
118 return array_convert<T, bool>(get<val::SpVAB>(x));
120 return array_convert<T, Global::dtime>(get<val::SpVADT>(x));
121 case val::vt_duration:
122 return array_convert<T, Global::duration>(get<val::SpVADUR>(x));
124 return array_convert<T, tz::period>(get<val::SpVAPRD>(x));
125 case val::vt_interval:
126 return array_convert<T, tz::interval>(get<val::SpVAIVL>(x));
127 case val::vt_string: {
128 return array_convert<T, arr::zstring>(get<val::SpVAS>(x));
131 throw std::range_error(
string(
"cannot convert to ") +
TypeName<T>::s);
142 const auto convert_logical = value_convert<bool>;
143 const auto convert_numeric = value_convert<double>;
144 const auto convert_character = value_convert<arr::zstring>;
145 const auto convert_duration = value_convert<Global::duration>;
146 const auto convert_period = value_convert<tz::period>;
147 const auto convert_time = value_convert<Global::dtime>;
148 const auto convert_interval = value_convert<tz::interval>;
150 bool operator<(val::ValType vt1, val::ValType vt2);
151 bool operator>(val::ValType vt1, val::ValType vt2);
152 bool operator==(val::ValType vt1, val::ValType vt2);
154 bool isTrue(val::Value x);