19 #ifndef BASE_TYPES_HPP
20 #define BASE_TYPES_HPP
27 #include "globals.hpp"
28 #include "type_utils.hpp"
29 #include "timezone/interval.hpp"
30 #include "timezone/zone.hpp"
31 #include "timezone/ztime.hpp"
52 inline Global::dtime getInitValue() {
53 return Global::dtime(Global::dtime::duration::zero());
56 inline Global::duration getInitValue() {
57 return Global::dtime::duration::zero();
69 template<
typename T,
typename U>
71 throw std::range_error(std::string(
"conversion not defined for ") +
TypeName<U>::s +
83 inline double convert(
const double& u) {
87 inline zstring
convert(
const zstring& u) {
91 inline bool convert(
const bool& u) {
95 inline Global::dtime
convert(
const Global::dtime& u) {
99 inline Global::duration
convert(
const Global::duration& u) {
131 std::string
convert(
const double& u);
133 std::string
convert(
const bool& u);
135 std::string
convert(
const Global::dtime& u);
137 std::string
convert(
const Global::duration& u);
143 inline std::string
convert(
const std::string& u) {
149 inline double convert(
const bool& u) {
158 inline double convert(
const Global::duration& u) {
165 inline bool convert(
const double& u) {
169 inline bool convert(
const Global::duration& u) {
176 inline Global::duration
convert(
const double& u) {
177 return Global::duration(
static_cast<const uint64_t
>(u));
181 return tz::duration_from_string2(u);
193 return tz::dtime_from_string(u, tzones);
199 return tz::interval_from_string(u, tzones);