Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2014-10-16 15:59:17 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:30:54 +0300
commit3ab59b8840936724e808b9a23f04458483e033e6 (patch)
tree545d86701f3fd7ba897f1a70f4f8e599c2734fed /std
parent5befb68da6c30cb2b75e10b2606d6db70b3bcaf8 (diff)
[linux] Added get_time function.
Diffstat (limited to 'std')
-rw-r--r--std/iomanip.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/std/iomanip.hpp b/std/iomanip.hpp
index b24867e6f0..d62fdb85d8 100644
--- a/std/iomanip.hpp
+++ b/std/iomanip.hpp
@@ -1,5 +1,6 @@
#pragma once
#include "common_defines.hpp"
+#include "target_os.hpp"
#ifdef new
#undef new
@@ -11,8 +12,64 @@ using std::setfill;
using std::hex;
using std::fixed;
using std::setprecision;
+
+
+#ifndef OMIM_OS_LINUX
using std::get_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
+
#ifdef DEBUG_NEW
#define new DEBUG_NEW
#endif