]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/chrono/include/boost/chrono/io/time_point_units.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / chrono / include / boost / chrono / io / time_point_units.hpp
CommitLineData
7c673cae
FG
1// (C) Copyright Howard Hinnant
2// (C) Copyright 2011 Vicente J. Botet Escriba
3// Copyright (c) Microsoft Corporation 2014
4// Use, modification and distribution are subject to the Boost Software License,
5// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt).
7//
8
9#ifndef BOOST_CHRONO_IO_TIME_POINT_UNITS_HPP
10#define BOOST_CHRONO_IO_TIME_POINT_UNITS_HPP
11
12#include <boost/chrono/config.hpp>
13#include <boost/chrono/process_cpu_clocks.hpp>
14#include <boost/chrono/system_clocks.hpp>
15#include <boost/chrono/thread_clock.hpp>
16#include <boost/chrono/io/ios_base_state.hpp>
17#include <string>
18#include <iostream>
19#include <ios>
20#include <locale>
21#include <algorithm>
22
23namespace boost
24{
25 namespace chrono
26 {
27 /**
28 * customization point to the epoch associated to the clock @c Clock
29 * The default calls @c f.do_get_epoch(Clock()). The user can overload this function.
30 * @return the string epoch associated to the @c Clock
31 */
32 template <typename CharT, typename Clock, typename TPUFacet>
33 std::basic_string<CharT> get_epoch_custom(Clock, TPUFacet& f)
34 {
35 return f.do_get_epoch(Clock());
36 }
37
38 /**
39 * @c time_point_units facet gives useful information about the time_point pattern,
40 * the text associated to a time_point's epoch,
41 */
42 template <typename CharT=char>
43 class time_point_units: public std::locale::facet
44 {
45 public:
46 /**
47 * Type of character the facet is instantiated on.
48 */
49 typedef CharT char_type;
50 /**
51 * Type of character string used by member functions.
52 */
53 typedef std::basic_string<char_type> string_type;
54
55 /**
56 * Unique identifier for this type of facet.
57 */
58 static std::locale::id id;
59
60 /**
61 * Construct a @c time_point_units facet.
62 * @param refs
63 * @Effects Construct a @c time_point_units facet.
64 * If the @c refs argument is @c 0 then destruction of the object is
65 * delegated to the @c locale, or locales, containing it. This allows
66 * the user to ignore lifetime management issues. On the other had,
67 * if @c refs is @c 1 then the object must be explicitly deleted;
68 * the @c locale will not do so. In this case, the object can be
69 * maintained across the lifetime of multiple locales.
70 */
71 explicit time_point_units(size_t refs = 0) :
72 std::locale::facet(refs)
73 {
74 }
75
76 /**
77 * @return the pattern to be used by default.
78 */
79 virtual string_type get_pattern() const =0;
80
81 /**
82 * @return the epoch associated to the clock @c Clock calling @c do_get_epoch(Clock())
83 */
84 template <typename Clock>
85 string_type get_epoch() const
86 {
87 return get_epoch_custom<CharT>(Clock(), *this);
88 }
89
90 protected:
91 /**
92 * Destroy the facet.
93 */
94 virtual ~time_point_units() {}
95
96 public:
97
98 /**
99 *
100 * @param c a dummy instance of @c system_clock.
101 * @return The epoch string associated to the @c system_clock.
102 */
103 virtual string_type do_get_epoch(system_clock) const=0;
104
105 /**
106 *
107 * @param c a dummy instance of @c steady_clock.
108 * @return The epoch string associated to the @c steady_clock.
109 */
110 virtual string_type do_get_epoch(steady_clock) const=0;
111
112#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
113 /**
114 *
115 * @param c a dummy instance of @c process_real_cpu_clock.
116 * @return The epoch string associated to the @c process_real_cpu_clock.
117 */
118 virtual string_type do_get_epoch(process_real_cpu_clock) const=0;
119#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
120 /**
121 *
122 * @param c a dummy instance of @c process_user_cpu_clock.
123 * @return The epoch string associated to the @c process_user_cpu_clock.
124 */
125 virtual string_type do_get_epoch(process_user_cpu_clock) const=0;
126 /**
127 *
128 * @param c a dummy instance of @c process_system_cpu_clock.
129 * @return The epoch string associated to the @c process_system_cpu_clock.
130 */
131 virtual string_type do_get_epoch(process_system_cpu_clock) const=0;
132 /**
133 *
134 * @param c a dummy instance of @c process_cpu_clock.
135 * @return The epoch string associated to the @c process_cpu_clock.
136 */
137 virtual string_type do_get_epoch(process_cpu_clock) const=0;
138#endif
139#endif
140#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
141 /**
142 *
143 * @param c a dummy instance of @c thread_clock.
144 * @return The epoch string associated to the @c thread_clock.
145 */
146 virtual string_type do_get_epoch(thread_clock) const=0;
147#endif
148
149 };
150
151 template <typename CharT>
152 std::locale::id time_point_units<CharT>::id;
153
154
155 // This class is used to define the strings for the default English
156 template <typename CharT=char>
157 class time_point_units_default: public time_point_units<CharT>
158 {
159 public:
160 /**
161 * Type of character the facet is instantiated on.
162 */
163 typedef CharT char_type;
164 /**
165 * Type of character string returned by member functions.
166 */
167 typedef std::basic_string<char_type> string_type;
168
169 explicit time_point_units_default(size_t refs = 0) :
170 time_point_units<CharT> (refs)
171 {
172 }
173 ~time_point_units_default() {}
174
175 /**
176 * @return the default pattern "%d%e".
177 */
178 string_type get_pattern() const
179 {
180 static const CharT t[] =
181 { '%', 'd', '%', 'e' };
182 static const string_type pattern(t, t + sizeof (t) / sizeof (t[0]));
183
184 return pattern;
185 }
186
187 //protected:
188 /**
189 * @param c a dummy instance of @c system_clock.
190 * @return The epoch string returned by @c clock_string<system_clock,CharT>::since().
191 */
192 string_type do_get_epoch(system_clock ) const
193 {
194 return clock_string<system_clock,CharT>::since();
195 }
196 /**
197 * @param c a dummy instance of @c steady_clock.
198 * @return The epoch string returned by @c clock_string<steady_clock,CharT>::since().
199 */
200 string_type do_get_epoch(steady_clock ) const
201 {
202 return clock_string<steady_clock,CharT>::since();
203 }
204
205#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
206 /**
207 * @param c a dummy instance of @c process_real_cpu_clock.
208 * @return The epoch string returned by @c clock_string<process_real_cpu_clock,CharT>::since().
209 */
210 string_type do_get_epoch(process_real_cpu_clock ) const
211 {
212 return clock_string<process_real_cpu_clock,CharT>::since();
213 }
214#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
215 /**
216 * @param c a dummy instance of @c process_user_cpu_clock.
217 * @return The epoch string returned by @c clock_string<process_user_cpu_clock,CharT>::since().
218 */
219 string_type do_get_epoch(process_user_cpu_clock ) const
220 {
221 return clock_string<process_user_cpu_clock,CharT>::since();
222 }
223 /**
224 * @param c a dummy instance of @c process_system_cpu_clock.
225 * @return The epoch string returned by @c clock_string<process_system_cpu_clock,CharT>::since().
226 */
227 string_type do_get_epoch(process_system_cpu_clock ) const
228 {
229 return clock_string<process_system_cpu_clock,CharT>::since();
230 }
231 /**
232 * @param c a dummy instance of @c process_cpu_clock.
233 * @return The epoch string returned by @c clock_string<process_cpu_clock,CharT>::since().
234 */
235 string_type do_get_epoch(process_cpu_clock ) const
236 {
237 return clock_string<process_cpu_clock,CharT>::since();
238 }
239
240#endif
241#endif
242#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
243 /**
244 * @param c a dummy instance of @c thread_clock.
245 * @return The epoch string returned by @c clock_string<thread_clock,CharT>::since().
246 */
247 string_type do_get_epoch(thread_clock ) const
248 {
249 return clock_string<thread_clock,CharT>::since();
250 }
251#endif
252
253 };
254
255
256 } // chrono
257
258} // boost
259
260#endif // header