From 5acaffc2b330b65bd5bbc176e4501ca4cb2bcb07 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 27 Jan 2016 19:59:32 -0500 Subject: [PATCH] Add timezone db version and misc cleanup --- tz.cpp | 18 +++++++++++++++++- tz.h | 29 ++++++----------------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/tz.cpp b/tz.cpp index c910292..e497cb9 100644 --- a/tz.cpp +++ b/tz.cpp @@ -84,7 +84,7 @@ namespace date #if _WIN32 // TODO: sensible default for all platforms. static std::string install{ "c:\\tzdata" }; #else -static std::string install{ "/Users/howardhinnant/Downloads/tzdata2015f" }; +static std::string install{ "/Users/howardhinnant/Downloads/tzdata2016a" }; #endif static const std::vector files = @@ -1906,6 +1906,22 @@ init_tzdb() throw std::runtime_error(msg); } + { + std::ifstream infile(path + "Makefile"); + while (infile) + { + std::string version; + infile >> version; + if (version == "VERSION=") + { + infile >> db.version; + break; + } + } + if (db.version.empty()) + throw std::runtime_error("Unable to get Timezone database version"); + } + for (const auto& filename : files) { std::ifstream infile(path + filename); diff --git a/tz.h b/tz.h index 1a073c0..221f418 100644 --- a/tz.h +++ b/tz.h @@ -204,7 +204,7 @@ public: #if !defined(_MSC_VER) || (_MSC_VER >= 1900) Zone(Zone&&) = default; Zone& operator=(Zone&&) = default; -#else +#else // defined(_MSC_VER) || (_MSC_VER >= 1900) Zone(Zone&& src) : name_(std::move(src.name_)), @@ -217,7 +217,7 @@ public: zonelets_ = std::move(src.zonelets_); return *this; } -#endif +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) explicit Zone(const std::string& s); @@ -553,35 +553,18 @@ struct timezone_mapping std::string type; }; -#if 0 -// This represents the type for the tzi field in the windows registry. -// It's TBD if we need this yet. -struct TZI -{ - TZI() = default; - int Bias; - int StandardBias; - int DaylightBias; - SYSTEMTIME StandardDate; - SYSTEMTIME DaylightDate; -}; -#endif - struct timezone_info { timezone_info() = default; std::string timezone_id; std::string standard_name; -#if 0 // TBD - std::string display_name; - TZI tzi; -#endif }; -#endif +#endif // TIMEZONE_MAPPING struct TZ_DB { + std::string version; std::vector zones; std::vector links; std::vector leaps; @@ -596,7 +579,7 @@ struct TZ_DB #if !defined(_MSC_VER) || (_MSC_VER >= 1900) TZ_DB(TZ_DB&&) = default; TZ_DB& operator=(TZ_DB&&) = default; -#else +#else // defined(_MSC_VER) || (_MSC_VER >= 1900) TZ_DB(TZ_DB&& src) : zones(std::move(src.zones)), @@ -622,7 +605,7 @@ struct TZ_DB #endif return *this; } -#endif +#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) }; std::ostream& operator<<(std::ostream& os, const TZ_DB& db);