annotate DEPENDENCIES/generic/include/boost/chrono/io/ios_base_state.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // (C) Copyright 2011 Vicente J. Botet Escriba
Chris@16 2 // Use, modification and distribution are subject to the Boost Software License,
Chris@16 3 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt).
Chris@16 5 //
Chris@16 6 // This code was adapted by Vicente from Howard Hinnant's experimental work
Chris@16 7 // on chrono i/o to Boost
Chris@16 8
Chris@16 9 #ifndef BOOST_CHRONO_IO_IOS_BASE_STATE_HPP
Chris@16 10 #define BOOST_CHRONO_IO_IOS_BASE_STATE_HPP
Chris@16 11
Chris@16 12 #include <boost/chrono/config.hpp>
Chris@16 13 #include <locale>
Chris@16 14 #include <boost/chrono/io/duration_style.hpp>
Chris@16 15 #include <boost/chrono/io/timezone.hpp>
Chris@16 16 #include <boost/chrono/io/utility/ios_base_state_ptr.hpp>
Chris@16 17
Chris@16 18 namespace boost
Chris@16 19 {
Chris@16 20 namespace chrono
Chris@16 21 {
Chris@16 22
Chris@16 23 class fmt_masks : public ios_flags<fmt_masks>
Chris@16 24 {
Chris@16 25 typedef ios_flags<fmt_masks> base_type;
Chris@16 26 fmt_masks& operator=(fmt_masks const& rhs) ;
Chris@16 27
Chris@16 28 public:
Chris@16 29 fmt_masks(std::ios_base& ios): base_type(ios) {}
Chris@16 30 enum type
Chris@16 31 {
Chris@16 32 uses_symbol = 1 << 0,
Chris@16 33 uses_local = 1 << 1
Chris@16 34 };
Chris@16 35
Chris@16 36 inline duration_style get_duration_style()
Chris@16 37 {
Chris@16 38 return (flags() & uses_symbol) ? duration_style::symbol : duration_style::prefix;
Chris@16 39 }
Chris@16 40 inline void set_duration_style(duration_style style)
Chris@16 41 {
Chris@16 42 if (style == duration_style::symbol)
Chris@16 43 setf(uses_symbol);
Chris@16 44 else
Chris@16 45 unsetf(uses_symbol);
Chris@16 46 }
Chris@16 47
Chris@16 48 inline timezone get_timezone()
Chris@16 49 {
Chris@16 50 return (flags() & uses_local) ? timezone::local : timezone::utc;
Chris@16 51 }
Chris@16 52 inline void set_timezone(timezone tz)
Chris@16 53 {
Chris@16 54 if (tz == timezone::local)
Chris@16 55 setf(uses_local);
Chris@16 56 else
Chris@16 57 unsetf(uses_local);
Chris@16 58 }
Chris@16 59 };
Chris@16 60 namespace detail
Chris@16 61 {
Chris@16 62 namespace /**/ {
Chris@16 63 xalloc_key_initializer<fmt_masks > fmt_masks_xalloc_key_initializer;
Chris@16 64 } // namespace
Chris@16 65 } // namespace detail
Chris@16 66
Chris@16 67 inline duration_style get_duration_style(std::ios_base & ios)
Chris@16 68 {
Chris@16 69 return fmt_masks(ios).get_duration_style();
Chris@16 70 }
Chris@16 71 inline void set_duration_style(std::ios_base& ios, duration_style style)
Chris@16 72 {
Chris@16 73 fmt_masks(ios).set_duration_style(style);
Chris@16 74 }
Chris@16 75 inline std::ios_base& symbol_format(std::ios_base& ios)
Chris@16 76 {
Chris@16 77 fmt_masks(ios).setf(fmt_masks::uses_symbol);
Chris@16 78 return ios;
Chris@16 79 }
Chris@16 80 inline std::ios_base& name_format(std::ios_base& ios)
Chris@16 81 {
Chris@16 82 fmt_masks(ios).unsetf(fmt_masks::uses_symbol);
Chris@16 83 return ios;
Chris@16 84 }
Chris@16 85
Chris@16 86 inline timezone get_timezone(std::ios_base & ios)
Chris@16 87 {
Chris@16 88 return fmt_masks(ios).get_timezone();
Chris@16 89 }
Chris@16 90 inline void set_timezone(std::ios_base& ios, timezone tz)
Chris@16 91 {
Chris@16 92 fmt_masks(ios).set_timezone(tz);
Chris@16 93 }
Chris@16 94 inline std::ios_base& local_timezone(std::ios_base& ios)
Chris@16 95 {
Chris@16 96 fmt_masks(ios).setf(fmt_masks::uses_local);
Chris@16 97 return ios;
Chris@16 98 }
Chris@16 99
Chris@16 100 inline std::ios_base& utc_timezone(std::ios_base& ios)
Chris@16 101 {
Chris@16 102 fmt_masks(ios).unsetf(fmt_masks::uses_local);
Chris@16 103 return ios;
Chris@16 104 }
Chris@16 105
Chris@16 106 namespace detail
Chris@16 107 {
Chris@16 108
Chris@16 109 template<typename CharT>
Chris@16 110 struct ios_base_data_aux
Chris@16 111 {
Chris@16 112 std::basic_string<CharT> time_fmt;
Chris@16 113 std::basic_string<CharT> duration_fmt;
Chris@16 114 public:
Chris@16 115
Chris@16 116 ios_base_data_aux() :
Chris@16 117 time_fmt(""),
Chris@16 118 duration_fmt("")
Chris@16 119 {
Chris@16 120 }
Chris@16 121 };
Chris@16 122 template<typename CharT>
Chris@16 123 struct ios_base_data {};
Chris@16 124 namespace /**/ {
Chris@16 125 xalloc_key_initializer<detail::ios_base_data<char> > ios_base_data_aux_xalloc_key_initializer;
Chris@16 126 xalloc_key_initializer<detail::ios_base_data<wchar_t> > wios_base_data_aux_xalloc_key_initializer;
Chris@16 127 #if BOOST_CHRONO_HAS_UNICODE_SUPPORT
Chris@16 128 xalloc_key_initializer<detail::ios_base_data<char16_t> > u16ios_base_data_aux_xalloc_key_initializer;
Chris@16 129 xalloc_key_initializer<detail::ios_base_data<char32_t> > u32ios_base_data_aux_xalloc_key_initializer;
Chris@16 130 #endif
Chris@16 131 } // namespace
Chris@16 132 } // namespace detail
Chris@16 133
Chris@16 134 template<typename CharT>
Chris@16 135 inline std::basic_string<CharT> get_time_fmt(std::ios_base & ios)
Chris@16 136 {
Chris@16 137 ios_state_not_null_ptr<detail::ios_base_data<CharT>, detail::ios_base_data_aux<CharT> > ptr(ios);
Chris@16 138 return ptr->time_fmt;
Chris@16 139 }
Chris@16 140 template<typename CharT>
Chris@16 141 inline void set_time_fmt(std::ios_base& ios, std::basic_string<
Chris@16 142 CharT> const& fmt)
Chris@16 143 {
Chris@16 144 ios_state_not_null_ptr<detail::ios_base_data<CharT>, detail::ios_base_data_aux<CharT> > ptr(ios);
Chris@16 145 ptr->time_fmt = fmt;
Chris@16 146 }
Chris@16 147
Chris@16 148 } // chrono
Chris@16 149 } // boost
Chris@16 150
Chris@16 151 #endif // header