diff options
Diffstat (limited to 'base/timer.cpp')
-rw-r--r-- | base/timer.cpp | 63 |
1 files changed, 3 insertions, 60 deletions
diff --git a/base/timer.cpp b/base/timer.cpp index cf69719581..56b0d63811 100644 --- a/base/timer.cpp +++ b/base/timer.cpp @@ -1,4 +1,5 @@ #include "base/assert.hpp" +#include "base/get_time.hpp" #include "base/macros.hpp" #include "base/timegm.hpp" #include "base/timer.hpp" @@ -13,64 +14,6 @@ #include <sys/time.h> -#ifndef OMIM_OS_LINUX -using std::get_time; -using std::put_time; -#else -#include <cassert> - -namespace detail -{ - template <class _CharT> struct get_time_manip - { - tm* __tm_; - const _CharT* __fmt_; - - get_time_manip(tm* __tm, const _CharT* __fmt) - : __tm_(__tm), __fmt_(__fmt) {} - }; - - template <class _CharT, class _Traits> - class stream_buf_impl : public std::basic_streambuf<_CharT, _Traits> - { - typedef std::basic_streambuf<_CharT, _Traits> base_t; - public: - bool parse(const get_time_manip<_CharT>& __x) - { - // Workaround works only for a stream buffer under null-terminated string. - assert(*base_t::egptr() == 0); - - char * res = ::strptime(base_t::gptr(), __x.__fmt_, __x.__tm_); - if (res == 0) - return false; - else - { - base_t::setg(base_t::eback(), res, base_t::egptr()); - return true; - } - } - }; - - template <class _CharT, class _Traits> - std::basic_istream<_CharT, _Traits>& - operator>>(std::basic_istream<_CharT, _Traits>& __is, const get_time_manip<_CharT>& __x) - { - if (!reinterpret_cast<stream_buf_impl<_CharT, _Traits>*>(__is.rdbuf())->parse(__x)) - __is.setstate(std::ios_base::failbit); - return __is; - } -} - -template <class _CharT> -detail::get_time_manip<_CharT> get_time(tm* __tm, const _CharT* __fmt) -{ - return detail::get_time_manip<_CharT>(__tm, __fmt); -} - -#endif - - - namespace my { @@ -162,7 +105,7 @@ time_t StringToTimestamp(std::string const & s) // Parse UTC format: 1970-01-01T00:00:00Z tm t{}; std::istringstream ss(s); - ss >> get_time(&t, "%Y-%m-%dT%H:%M:%SZ"); + ss >> base::get_time(&t, "%Y-%m-%dT%H:%M:%SZ"); if (!ss.fail() && IsValid(t)) res = base::TimeGM(t); @@ -173,7 +116,7 @@ time_t StringToTimestamp(std::string const & s) tm t1{}, t2{}; char sign; std::istringstream ss(s); - ss >> get_time(&t1, "%Y-%m-%dT%H:%M:%S") >> sign >> get_time(&t2, "%H:%M"); + ss >> base::get_time(&t1, "%Y-%m-%dT%H:%M:%S") >> sign >> base::get_time(&t2, "%H:%M"); if (!ss.fail() && IsValid(t1)) { |