annotate DEPENDENCIES/generic/include/boost/chrono/io/duration_units.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // (C) Copyright Howard Hinnant
Chris@16 2 // (C) Copyright 2011 Vicente J. Botet Escriba
Chris@16 3 // Use, modification and distribution are subject to the Boost Software License,
Chris@16 4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt).
Chris@16 6 //
Chris@16 7
Chris@16 8 #ifndef BOOST_CHRONO_IO_DURATION_UNITS_HPP
Chris@16 9 #define BOOST_CHRONO_IO_DURATION_UNITS_HPP
Chris@16 10
Chris@16 11 #include <boost/chrono/config.hpp>
Chris@16 12 #include <boost/ratio/ratio_io.hpp>
Chris@16 13 #include <boost/chrono/duration.hpp>
Chris@16 14 #include <boost/chrono/io/duration_style.hpp>
Chris@16 15 #include <boost/chrono/io/ios_base_state.hpp>
Chris@16 16 #include <boost/assert.hpp>
Chris@16 17 #include <string>
Chris@16 18 #include <ios>
Chris@16 19 #include <locale>
Chris@16 20 #include <algorithm>
Chris@16 21
Chris@16 22 namespace boost
Chris@16 23 {
Chris@16 24 namespace chrono
Chris@16 25 {
Chris@16 26 class rt_ratio
Chris@16 27 {
Chris@16 28 public:
Chris@16 29 template <typename Period>
Chris@16 30 rt_ratio(Period const&) :
Chris@16 31 num(Period::type::num), den(Period::type::den)
Chris@16 32 {
Chris@16 33 }
Chris@16 34
Chris@16 35 rt_ratio(intmax_t n = 0, intmax_t d = 0) :
Chris@16 36 num(n), den(d)
Chris@16 37 {
Chris@16 38 }
Chris@16 39
Chris@16 40 intmax_t num;
Chris@16 41 intmax_t den;
Chris@16 42 };
Chris@16 43
Chris@16 44 /**
Chris@16 45 * @c duration_units facet gives useful information about the duration units,
Chris@16 46 * as the number of plural forms, the plural form associated to a duration,
Chris@16 47 * the text associated to a plural form and a duration's period,
Chris@16 48 */
Chris@16 49 template <typename CharT = char>
Chris@16 50 class duration_units: public std::locale::facet
Chris@16 51 {
Chris@16 52 public:
Chris@16 53 /**
Chris@16 54 * Type of character the facet is instantiated on.
Chris@16 55 */
Chris@16 56 typedef CharT char_type;
Chris@16 57 /**
Chris@16 58 * Type of character string passed to member functions.
Chris@16 59 */
Chris@16 60 typedef std::basic_string<CharT> string_type;
Chris@16 61
Chris@16 62 /**
Chris@16 63 * Unique identifier for this type of facet.
Chris@16 64 */
Chris@16 65 static std::locale::id id;
Chris@16 66
Chris@16 67 /**
Chris@16 68 * Construct a @c duration_units facet.
Chris@16 69 * @param refs
Chris@16 70 * @Effects Construct a @c duration_units facet.
Chris@16 71 * If the @c refs argument is @c 0 then destruction of the object is
Chris@16 72 * delegated to the @c locale, or locales, containing it. This allows
Chris@16 73 * the user to ignore lifetime management issues. On the other had,
Chris@16 74 * if @c refs is @c 1 then the object must be explicitly deleted;
Chris@16 75 * the @c locale will not do so. In this case, the object can be
Chris@16 76 * maintained across the lifetime of multiple locales.
Chris@16 77 */
Chris@16 78 explicit duration_units(size_t refs = 0) :
Chris@16 79 std::locale::facet(refs)
Chris@16 80 {
Chris@16 81 }
Chris@16 82
Chris@16 83 /**
Chris@16 84 * @return pointer to the start of valid [N/D] units.
Chris@16 85 */
Chris@16 86 virtual const string_type* get_n_d_valid_units_start() const =0;
Chris@16 87 /**
Chris@16 88 * @effect calls the do_...
Chris@16 89 * @return pointer to the end of valid [N/D] units.
Chris@16 90 */
Chris@16 91 virtual const string_type* get_n_d_valid_units_end() const=0;
Chris@16 92
Chris@16 93 /**
Chris@16 94 * @return pointer to the start of valid units, symbol or prefix with its different plural forms.
Chris@16 95 */
Chris@16 96 virtual const string_type* get_valid_units_start() const=0;
Chris@16 97 /**
Chris@16 98 * @return pointer to the end of valid units.
Chris@16 99 */
Chris@16 100 virtual const string_type* get_valid_units_end() const=0;
Chris@16 101
Chris@16 102 /**
Chris@16 103 * @param k the found pointer to the [N/D] unit.
Chris@16 104 * @return true if @c k matches a valid unit.
Chris@16 105 */
Chris@16 106 virtual bool match_n_d_valid_unit(const string_type* k) const = 0;
Chris@16 107 /**
Chris@16 108 * @param k the found pointer to the unit.
Chris@16 109 * @Effects @c rt is set to the valid Period when the @c k matches a valid unit.
Chris@16 110 * @return true if @c k matches a valid unit.
Chris@16 111 */
Chris@16 112 virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const = 0;
Chris@16 113
Chris@16 114 /**
Chris@16 115 * @effect calls the do_...
Chris@16 116 * @return the pattern to be used by default.
Chris@16 117 */
Chris@16 118 virtual string_type get_pattern() const=0;
Chris@16 119
Chris@16 120 /**
Chris@16 121 * @effect calls the do_...
Chris@16 122 * @return the unit associated to this duration.
Chris@16 123 */
Chris@16 124 template <typename Rep, typename Period>
Chris@16 125 string_type get_unit(duration_style style, duration<Rep, Period> const& d) const
Chris@16 126 {
Chris@16 127 return do_get_unit(style, rt_ratio(Period()), static_cast<intmax_t>(d.count()));
Chris@16 128 }
Chris@16 129 /**
Chris@16 130 * @effect calls the do_...
Chris@16 131 * @return the [N/D] suffix unit associated to this duration.
Chris@16 132 */
Chris@16 133 template <typename Rep, typename Period>
Chris@16 134 string_type get_n_d_unit(duration_style style, duration<Rep, Period> const& d) const
Chris@16 135 {
Chris@16 136 return do_get_n_d_unit(style, rt_ratio(Period()), static_cast<intmax_t>(d.count()));
Chris@16 137 }
Chris@16 138
Chris@16 139 /**
Chris@16 140 * @effect calls the do_...
Chris@16 141 * @return true if the unit associated to the given Period is named, false otherwise.
Chris@16 142 */
Chris@16 143 template <typename Period>
Chris@16 144 bool is_named_unit() const
Chris@16 145 {
Chris@16 146 return do_is_named_unit(rt_ratio(Period()));
Chris@16 147 }
Chris@16 148
Chris@16 149
Chris@16 150 protected:
Chris@16 151
Chris@16 152 /**
Chris@16 153 * @Effects Destroys the facet
Chris@16 154 */
Chris@16 155 virtual ~duration_units()
Chris@16 156 {
Chris@16 157 }
Chris@16 158 /**
Chris@16 159 * @return the [N/D] suffix unit associated to this duration.
Chris@16 160 */
Chris@16 161 virtual string_type do_get_n_d_unit(duration_style style, rt_ratio rt, intmax_t v) const = 0;
Chris@16 162 /**
Chris@16 163 * @return the unit associated to this duration.
Chris@16 164 */
Chris@16 165 virtual string_type do_get_unit(duration_style style,rt_ratio rt, intmax_t v) const = 0;
Chris@16 166 /**
Chris@16 167 * @return true if the unit associated to the given Period is named, false otherwise.
Chris@16 168 */
Chris@16 169 virtual bool do_is_named_unit(rt_ratio rt) const =0;
Chris@16 170
Chris@16 171 };
Chris@16 172
Chris@16 173 template <typename CharT>
Chris@16 174 std::locale::id duration_units<CharT>::id;
Chris@16 175
Chris@16 176 namespace detail
Chris@16 177 {
Chris@16 178 template<typename CharT>
Chris@16 179 struct duration_units_default_holder
Chris@16 180 {
Chris@16 181 typedef std::basic_string<CharT> string_type;
Chris@16 182 static string_type* n_d_valid_units_;
Chris@16 183 static string_type* valid_units_;
Chris@16 184 static bool initialized_;
Chris@16 185 };
Chris@16 186 template <typename CharT>
Chris@16 187 typename duration_units_default_holder<CharT>::string_type* duration_units_default_holder<CharT>::n_d_valid_units_=0;
Chris@16 188 template <typename CharT>
Chris@16 189 typename duration_units_default_holder<CharT>::string_type* duration_units_default_holder<CharT>::valid_units_=0;
Chris@16 190 template<typename CharT>
Chris@16 191 bool duration_units_default_holder<CharT>::initialized_ = false;
Chris@16 192 }
Chris@16 193
Chris@16 194 /**
Chris@16 195 * This class is used to define the strings for the default English
Chris@16 196 */
Chris@16 197 template <typename CharT = char>
Chris@16 198 class duration_units_default: public duration_units<CharT>
Chris@16 199 {
Chris@16 200 protected:
Chris@16 201 static const std::size_t pfs_ = 2;
Chris@16 202
Chris@16 203 public:
Chris@16 204 /**
Chris@16 205 * Type of character the facet is instantiated on.
Chris@16 206 */
Chris@16 207 typedef CharT char_type;
Chris@16 208 /**
Chris@16 209 * Type of character string passed to member functions.
Chris@16 210 */
Chris@16 211 typedef std::basic_string<CharT> string_type;
Chris@16 212
Chris@16 213 /**
Chris@16 214 * Construct a @c duration_units_default facet.
Chris@16 215 * @param refs
Chris@16 216 * @Effects Construct a @c duration_units_default facet.
Chris@16 217 * If the @c refs argument is @c 0 then destruction of the object is
Chris@16 218 * delegated to the @c locale, or locales, containing it. This allows
Chris@16 219 * the user to ignore lifetime management issues. On the other had,
Chris@16 220 * if @c refs is @c 1 then the object must be explicitly deleted;
Chris@16 221 * the @c locale will not do so. In this case, the object can be
Chris@16 222 * maintained across the lifetime of multiple locales.
Chris@16 223 */
Chris@16 224 explicit duration_units_default(size_t refs = 0) :
Chris@16 225 duration_units<CharT> (refs)
Chris@16 226 {
Chris@16 227 }
Chris@16 228
Chris@16 229 /**
Chris@16 230 * Destroys the facet.
Chris@16 231 */
Chris@16 232 ~duration_units_default()
Chris@16 233 {
Chris@16 234 }
Chris@16 235
Chris@16 236 public:
Chris@16 237
Chris@16 238 /**
Chris@16 239 * @param k the found pointer to the [N/D] unit.
Chris@16 240 * @return true if @c k matches a valid unit.
Chris@16 241 */
Chris@16 242 bool match_n_d_valid_unit(const string_type* k) const
Chris@16 243 {
Chris@16 244 std::size_t index = (k - get_n_d_valid_units_start()) / (pfs_ + 1);
Chris@16 245 switch (index)
Chris@16 246 {
Chris@16 247 case 0:
Chris@16 248 break;
Chris@16 249 default:
Chris@16 250 return false;
Chris@16 251 }
Chris@16 252 return true;
Chris@16 253 }
Chris@16 254 /**
Chris@16 255 * @param k the found pointer to the unit.
Chris@16 256 * @Effects @c rt is set to the valid Period when the @c k matches a valid unit.
Chris@16 257 * @return true if @c k matches a valid unit.
Chris@16 258 */
Chris@16 259 bool match_valid_unit(const string_type* k, rt_ratio& rt) const
Chris@16 260 {
Chris@16 261 std::size_t index = (k - get_valid_units_start()) / (pfs_ + 1);
Chris@16 262 switch (index)
Chris@16 263 {
Chris@16 264 case 0:
Chris@16 265 rt = rt_ratio(atto());
Chris@16 266 break;
Chris@16 267 case 1:
Chris@16 268 rt = rt_ratio(femto());
Chris@16 269 break;
Chris@16 270 case 2:
Chris@16 271 rt = rt_ratio(pico());
Chris@16 272 break;
Chris@16 273 case 3:
Chris@16 274 rt = rt_ratio(nano());
Chris@16 275 break;
Chris@16 276 case 4:
Chris@16 277 rt = rt_ratio(micro());
Chris@16 278 break;
Chris@16 279 case 5:
Chris@16 280 rt = rt_ratio(milli());
Chris@16 281 break;
Chris@16 282 case 6:
Chris@16 283 rt = rt_ratio(centi());
Chris@16 284 break;
Chris@16 285 case 7:
Chris@16 286 rt = rt_ratio(deci());
Chris@16 287 break;
Chris@16 288 case 8:
Chris@16 289 rt = rt_ratio(deca());
Chris@16 290 break;
Chris@16 291 case 9:
Chris@16 292 rt = rt_ratio(hecto());
Chris@16 293 break;
Chris@16 294 case 10:
Chris@16 295 rt = rt_ratio(kilo());
Chris@16 296 break;
Chris@16 297 case 11:
Chris@16 298 rt = rt_ratio(mega());
Chris@16 299 break;
Chris@16 300 case 12:
Chris@16 301 rt = rt_ratio(giga());
Chris@16 302 break;
Chris@16 303 case 13:
Chris@16 304 rt = rt_ratio(tera());
Chris@16 305 break;
Chris@16 306 case 14:
Chris@16 307 rt = rt_ratio(peta());
Chris@16 308 break;
Chris@16 309 case 15:
Chris@16 310 rt = rt_ratio(exa());
Chris@16 311 break;
Chris@16 312 case 16:
Chris@16 313 rt = rt_ratio(ratio<1> ());
Chris@16 314 break;
Chris@16 315 case 17:
Chris@16 316 rt = rt_ratio(ratio<60> ());
Chris@16 317 break;
Chris@16 318 case 18:
Chris@16 319 rt = rt_ratio(ratio<3600> ());
Chris@16 320 break;
Chris@16 321 default:
Chris@16 322 return false;
Chris@16 323 }
Chris@16 324 return true;
Chris@16 325 }
Chris@16 326
Chris@16 327 /**
Chris@16 328 * @return pointer to the start of valid [N/D] units.
Chris@16 329 */
Chris@16 330 virtual const string_type* get_n_d_valid_units_start()const
Chris@16 331 {
Chris@16 332 return detail::duration_units_default_holder<CharT>::n_d_valid_units_;
Chris@16 333 }
Chris@16 334 /**
Chris@16 335 * @return pointer to the end of valid [N/D] units.
Chris@16 336 */
Chris@16 337 virtual const string_type* get_n_d_valid_units_end()const
Chris@16 338 {
Chris@16 339 return detail::duration_units_default_holder<CharT>::n_d_valid_units_ + (pfs_ + 1);
Chris@16 340 }
Chris@16 341
Chris@16 342 /**
Chris@16 343 * @return pointer to the start of valid units.
Chris@16 344 */
Chris@16 345 virtual const string_type* get_valid_units_start() const
Chris@16 346 {
Chris@16 347 return detail::duration_units_default_holder<CharT>::valid_units_;
Chris@16 348 }
Chris@16 349 /**
Chris@16 350 * @return pointer to the end of valid units.
Chris@16 351 */
Chris@16 352 virtual const string_type* get_valid_units_end() const
Chris@16 353 {
Chris@16 354 return detail::duration_units_default_holder<CharT>::valid_units_ + 19 * (pfs_ + 1);
Chris@16 355 }
Chris@16 356
Chris@16 357 string_type get_pattern() const
Chris@16 358 {
Chris@16 359 static const CharT t[] =
Chris@16 360 { '%', 'v', ' ', '%', 'u' };
Chris@16 361 static const string_type pattern(t, t + sizeof (t) / sizeof (t[0]));
Chris@16 362
Chris@16 363 return pattern;
Chris@16 364 }
Chris@16 365
Chris@16 366 protected:
Chris@16 367 /**
Chris@16 368 *
Chris@16 369 * This facet names the units associated to the following periods:
Chris@16 370 * atto,femto,pico,nano,micro,milli,centi,deci,ratio<1>,deca,hecto,kilo,mega,giga,tera,peta,exa,ratio<60> and ratio<3600>.
Chris@16 371 * @return true if the unit associated to the given Period is named, false otherwise.
Chris@16 372 */
Chris@16 373 bool do_is_named_unit(rt_ratio rt) const
Chris@16 374 {
Chris@16 375 if (rt.num==1) {
Chris@16 376 switch (rt.den)
Chris@16 377 {
Chris@16 378 case BOOST_RATIO_INTMAX_C(1):
Chris@16 379 case BOOST_RATIO_INTMAX_C(10):
Chris@16 380 case BOOST_RATIO_INTMAX_C(100):
Chris@16 381 case BOOST_RATIO_INTMAX_C(1000):
Chris@16 382 case BOOST_RATIO_INTMAX_C(1000000):
Chris@16 383 case BOOST_RATIO_INTMAX_C(1000000000):
Chris@16 384 case BOOST_RATIO_INTMAX_C(1000000000000):
Chris@16 385 case BOOST_RATIO_INTMAX_C(1000000000000000):
Chris@16 386 case BOOST_RATIO_INTMAX_C(1000000000000000000):
Chris@16 387 return true;
Chris@16 388 default:
Chris@16 389 return false;
Chris@16 390 }
Chris@16 391 } else if (rt.den==1) {
Chris@16 392 switch (rt.num)
Chris@16 393 {
Chris@16 394 case BOOST_RATIO_INTMAX_C(10):
Chris@16 395 case BOOST_RATIO_INTMAX_C(60):
Chris@16 396 case BOOST_RATIO_INTMAX_C(100):
Chris@16 397 case BOOST_RATIO_INTMAX_C(1000):
Chris@16 398 case BOOST_RATIO_INTMAX_C(3600):
Chris@16 399 case BOOST_RATIO_INTMAX_C(1000000):
Chris@16 400 case BOOST_RATIO_INTMAX_C(1000000000):
Chris@16 401 case BOOST_RATIO_INTMAX_C(1000000000000):
Chris@16 402 case BOOST_RATIO_INTMAX_C(1000000000000000):
Chris@16 403 case BOOST_RATIO_INTMAX_C(1000000000000000000):
Chris@16 404 return true;
Chris@16 405 default:
Chris@16 406 return false;
Chris@16 407 }
Chris@16 408 }
Chris@16 409 return false;
Chris@16 410
Chris@16 411 }
Chris@16 412
Chris@16 413 /**
Chris@16 414 * In English the suffix used after [N/D] is the one associated to the period ratio<1>.
Chris@16 415 * @return the [N/D] suffix unit associated to this duration.
Chris@16 416 */
Chris@16 417 string_type do_get_n_d_unit(duration_style style, rt_ratio, intmax_t v) const
Chris@16 418 {
Chris@16 419 return do_get_unit(style, ratio<1>(), do_get_plural_form(v));
Chris@16 420 }
Chris@16 421
Chris@16 422 /**
Chris@16 423 * @return the unit associated to this duration if it is named, "" otherwise.
Chris@16 424 */
Chris@16 425 string_type do_get_unit(duration_style style, rt_ratio rt, intmax_t v) const
Chris@16 426 {
Chris@16 427 if (rt.num==1) {
Chris@16 428 switch (rt.den)
Chris@16 429 {
Chris@16 430 case BOOST_RATIO_INTMAX_C(1):
Chris@16 431 return do_get_unit(style, ratio<1>(), do_get_plural_form(v));
Chris@16 432 case BOOST_RATIO_INTMAX_C(10):
Chris@16 433 return do_get_unit(style, deci(), do_get_plural_form(v));
Chris@16 434 case BOOST_RATIO_INTMAX_C(100):
Chris@16 435 return do_get_unit(style, centi(), do_get_plural_form(v));
Chris@16 436 case BOOST_RATIO_INTMAX_C(1000):
Chris@16 437 return do_get_unit(style, milli(), do_get_plural_form(v));
Chris@16 438 case BOOST_RATIO_INTMAX_C(1000000):
Chris@16 439 return do_get_unit(style, micro(), do_get_plural_form(v));
Chris@16 440 case BOOST_RATIO_INTMAX_C(1000000000):
Chris@16 441 return do_get_unit(style, nano(), do_get_plural_form(v));
Chris@16 442 case BOOST_RATIO_INTMAX_C(1000000000000):
Chris@16 443 return do_get_unit(style, pico(), do_get_plural_form(v));
Chris@16 444 case BOOST_RATIO_INTMAX_C(1000000000000000):
Chris@16 445 return do_get_unit(style, femto(), do_get_plural_form(v));
Chris@16 446 case BOOST_RATIO_INTMAX_C(1000000000000000000):
Chris@16 447 return do_get_unit(style, atto(), do_get_plural_form(v));
Chris@16 448 default:
Chris@16 449 ;
Chris@16 450 }
Chris@16 451 } else if (rt.den==1) {
Chris@16 452 switch (rt.num)
Chris@16 453 {
Chris@16 454 case BOOST_RATIO_INTMAX_C(10):
Chris@16 455 return do_get_unit(style, deca(), do_get_plural_form(v));
Chris@16 456 case BOOST_RATIO_INTMAX_C(60):
Chris@16 457 return do_get_unit(style, ratio<60>(), do_get_plural_form(v));
Chris@16 458 case BOOST_RATIO_INTMAX_C(100):
Chris@16 459 return do_get_unit(style, hecto(), do_get_plural_form(v));
Chris@16 460 case BOOST_RATIO_INTMAX_C(1000):
Chris@16 461 return do_get_unit(style, kilo(), do_get_plural_form(v));
Chris@16 462 case BOOST_RATIO_INTMAX_C(3600):
Chris@16 463 return do_get_unit(style, ratio<3600>(), do_get_plural_form(v));
Chris@16 464 case BOOST_RATIO_INTMAX_C(1000000):
Chris@16 465 return do_get_unit(style, mega(), do_get_plural_form(v));
Chris@16 466 case BOOST_RATIO_INTMAX_C(1000000000):
Chris@16 467 return do_get_unit(style, giga(), do_get_plural_form(v));
Chris@16 468 case BOOST_RATIO_INTMAX_C(1000000000000):
Chris@16 469 return do_get_unit(style, tera(), do_get_plural_form(v));
Chris@16 470 case BOOST_RATIO_INTMAX_C(1000000000000000):
Chris@16 471 return do_get_unit(style, peta(), do_get_plural_form(v));
Chris@16 472 case BOOST_RATIO_INTMAX_C(1000000000000000000):
Chris@16 473 return do_get_unit(style, exa(), do_get_plural_form(v));
Chris@16 474 default:
Chris@16 475 ;
Chris@16 476 }
Chris@16 477 }
Chris@16 478 BOOST_ASSERT(false&&"ratio parameter can not be translated");
Chris@16 479 //throw "exception";
Chris@16 480 return string_type();
Chris@16 481 }
Chris@16 482
Chris@16 483 protected:
Chris@16 484 /**
Chris@16 485 * @return the number of associated plural forms this facet manages.
Chris@16 486 */
Chris@16 487 virtual std::size_t do_get_plural_forms() const
Chris@16 488 {
Chris@16 489 return static_get_plural_forms();
Chris@16 490 }
Chris@16 491 static std::size_t static_get_plural_forms()
Chris@16 492 {
Chris@16 493 return pfs_;
Chris@16 494 }
Chris@16 495 /**
Chris@16 496 * Gets the associated plural form.
Chris@16 497 * @param value the duration representation
Chris@16 498 * @return the plural form associated to the @c value parameter. In English there are 2 plural forms
Chris@16 499 * 0 singular (-1 or 1)
Chris@16 500 * 1 plural for all others
Chris@16 501 */
Chris@16 502 virtual std::size_t do_get_plural_form(int_least64_t value) const
Chris@16 503 {
Chris@16 504 return static_get_plural_form(value);
Chris@16 505 }
Chris@16 506 static std::size_t static_get_plural_form(int_least64_t value)
Chris@16 507 {
Chris@16 508 return (value == -1 || value == 1) ? 0 : 1;
Chris@16 509 }
Chris@16 510
Chris@16 511 /**
Chris@16 512 * @param style the duration style.
Chris@16 513 * @param period the period associated to the duration seconds.
Chris@16 514 * @param pf the requested plural form.
Chris@16 515 * @return if style is symbol returns "s", otherwise if pf is 0 return "second", if pf is 1 "seconds"
Chris@16 516 */
Chris@16 517 virtual string_type do_get_unit(duration_style style, ratio<1> u, std::size_t pf) const
Chris@16 518 {
Chris@16 519 return static_get_unit(style,u,pf);
Chris@16 520 }
Chris@16 521 static string_type static_get_unit(duration_style style, ratio<1> , std::size_t pf)
Chris@16 522 {
Chris@16 523 static const CharT t[] =
Chris@16 524 { 's' };
Chris@16 525 static const string_type symbol(t, t + sizeof (t) / sizeof (t[0]));
Chris@16 526 static const CharT u[] =
Chris@16 527 { 's', 'e', 'c', 'o', 'n', 'd' };
Chris@16 528 static const string_type singular(u, u + sizeof (u) / sizeof (u[0]));
Chris@16 529 static const CharT v[] =
Chris@16 530 { 's', 'e', 'c', 'o', 'n', 'd', 's' };
Chris@16 531 static const string_type plural(v, v + sizeof (v) / sizeof (v[0]));
Chris@16 532
Chris@16 533 if (style == duration_style::symbol)
Chris@16 534 {
Chris@16 535 return symbol;
Chris@16 536 }
Chris@16 537 if (pf == 0)
Chris@16 538 {
Chris@16 539 return singular;
Chris@16 540 }
Chris@16 541 if (pf == 1)
Chris@16 542 {
Chris@16 543 return plural;
Chris@16 544 }
Chris@16 545 BOOST_ASSERT(false&&"style/pf parameters not valid");
Chris@16 546 //throw "exception";
Chris@16 547 return string_type();
Chris@16 548 }
Chris@16 549
Chris@16 550 /**
Chris@16 551 * @param style the duration style.
Chris@16 552 * @param period the period associated to the duration minutes.
Chris@16 553 * @param pf the requested plural form.
Chris@16 554 * @return if style is symbol returns "min", otherwise if pf is 0 return "minute", if pf is 1 "minutes"
Chris@16 555 */
Chris@16 556 virtual string_type do_get_unit(duration_style style, ratio<60> u, std::size_t pf) const
Chris@16 557 {
Chris@16 558 return static_get_unit(style,u,pf);
Chris@16 559 }
Chris@16 560 static string_type static_get_unit(duration_style style, ratio<60> , std::size_t pf)
Chris@16 561 {
Chris@16 562 static const CharT t[] =
Chris@16 563 { 'm', 'i', 'n' };
Chris@16 564 static const string_type symbol(t, t + sizeof (t) / sizeof (t[0]));
Chris@16 565
Chris@16 566 static const CharT u[] =
Chris@16 567 { 'm', 'i', 'n', 'u', 't', 'e' };
Chris@16 568 static const string_type singular(u, u + sizeof (u) / sizeof (u[0]));
Chris@16 569 static const CharT v[] =
Chris@16 570 { 'm', 'i', 'n', 'u', 't', 'e', 's' };
Chris@16 571 static const string_type plural(v, v + sizeof (v) / sizeof (v[0]));
Chris@16 572
Chris@16 573 if (style == duration_style::symbol) return symbol;
Chris@16 574 if (pf == 0) return singular;
Chris@16 575 if (pf == 1) return plural;
Chris@16 576 BOOST_ASSERT(false&&"style/pf parameters not valid");
Chris@16 577 //throw "exception";
Chris@16 578 return string_type();
Chris@16 579
Chris@16 580 }
Chris@16 581
Chris@16 582 /**
Chris@16 583 * @param style the duration style.
Chris@16 584 * @param period the period associated to the duration hours.
Chris@16 585 * @param pf the requested plural form.
Chris@16 586 * @return if style is symbol returns "h", otherwise if pf is 0 return "hour", if pf is 1 "hours"
Chris@16 587 */
Chris@16 588 virtual string_type do_get_unit(duration_style style, ratio<3600> u, std::size_t pf) const
Chris@16 589 {
Chris@16 590 return static_get_unit(style,u,pf);
Chris@16 591 }
Chris@16 592 static string_type static_get_unit(duration_style style, ratio<3600> , std::size_t pf)
Chris@16 593 {
Chris@16 594 static const CharT t[] =
Chris@16 595 { 'h' };
Chris@16 596 static const string_type symbol(t, t + sizeof (t) / sizeof (t[0]));
Chris@16 597 static const CharT u[] =
Chris@16 598 { 'h', 'o', 'u', 'r' };
Chris@16 599 static const string_type singular(u, u + sizeof (u) / sizeof (u[0]));
Chris@16 600 static const CharT v[] =
Chris@16 601 { 'h', 'o', 'u', 'r', 's' };
Chris@16 602 static const string_type plural(v, v + sizeof (v) / sizeof (v[0]));
Chris@16 603
Chris@16 604 if (style == duration_style::symbol) return symbol;
Chris@16 605 if (pf == 0) return singular;
Chris@16 606 if (pf == 1) return plural;
Chris@16 607 BOOST_ASSERT(false&&"style/pf parameters not valid");
Chris@16 608 //throw "exception";
Chris@16 609 return string_type();
Chris@16 610
Chris@16 611 }
Chris@16 612 /**
Chris@16 613 * @param style the duration style.
Chris@16 614 * @param u the period tag atto.
Chris@16 615 * @param pf the requested plural form.
Chris@16 616 * @return the concatenation of the prefix associated to @c period + the one associated to seconds.
Chris@16 617 */
Chris@16 618 virtual string_type do_get_unit(duration_style style, atto u, std::size_t pf) const
Chris@16 619 {
Chris@16 620 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 621 }
Chris@16 622 static string_type static_get_unit(duration_style style, atto u, std::size_t pf)
Chris@16 623 {
Chris@16 624 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 625 }
Chris@16 626 /**
Chris@16 627 * @param style the duration style.
Chris@16 628 * @param u the period tag femto.
Chris@16 629 * @param pf the requested plural form.
Chris@16 630 * @return the concatenation of the prefix associated to period @c u + the one associated to seconds.
Chris@16 631 */
Chris@16 632 virtual string_type do_get_unit(duration_style style, femto u, std::size_t pf) const
Chris@16 633 {
Chris@16 634 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 635 }
Chris@16 636 static string_type static_get_unit(duration_style style, femto u, std::size_t pf)
Chris@16 637 {
Chris@16 638 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 639 }
Chris@16 640 /**
Chris@16 641 * @param style the duration style.
Chris@16 642 * @param u the period tag femto.
Chris@16 643 * @param pf the requested plural form.
Chris@16 644 * @return the concatenation of the prefix associated to period @c u + the one associated to seconds.
Chris@16 645 */
Chris@16 646 virtual string_type do_get_unit(duration_style style, pico u, std::size_t pf) const
Chris@16 647 {
Chris@16 648 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 649 }
Chris@16 650 static string_type static_get_unit(duration_style style, pico u, std::size_t pf)
Chris@16 651 {
Chris@16 652 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 653 }
Chris@16 654 virtual string_type do_get_unit(duration_style style, nano u, std::size_t pf) const
Chris@16 655 {
Chris@16 656 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 657 }
Chris@16 658 static string_type static_get_unit(duration_style style, nano u, std::size_t pf)
Chris@16 659 {
Chris@16 660 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 661 }
Chris@16 662 virtual string_type do_get_unit(duration_style style, micro u, std::size_t pf) const
Chris@16 663 {
Chris@16 664 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 665 }
Chris@16 666 static string_type static_get_unit(duration_style style, micro u, std::size_t pf)
Chris@16 667 {
Chris@16 668 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 669 }
Chris@16 670 virtual string_type do_get_unit(duration_style style, milli u, std::size_t pf) const
Chris@16 671 {
Chris@16 672 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 673 }
Chris@16 674 static string_type static_get_unit(duration_style style, milli u, std::size_t pf)
Chris@16 675 {
Chris@16 676 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 677 }
Chris@16 678 virtual string_type do_get_unit(duration_style style, centi u, std::size_t pf) const
Chris@16 679 {
Chris@16 680 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 681 }
Chris@16 682 static string_type static_get_unit(duration_style style, centi u, std::size_t pf)
Chris@16 683 {
Chris@16 684 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 685 }
Chris@16 686 virtual string_type do_get_unit(duration_style style, deci u, std::size_t pf) const
Chris@16 687 {
Chris@16 688 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 689 }
Chris@16 690 static string_type static_get_unit(duration_style style, deci u, std::size_t pf)
Chris@16 691 {
Chris@16 692 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 693 }
Chris@16 694 virtual string_type do_get_unit(duration_style style, deca u, std::size_t pf) const
Chris@16 695 {
Chris@16 696 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 697 }
Chris@16 698 static string_type static_get_unit(duration_style style, deca u, std::size_t pf)
Chris@16 699 {
Chris@16 700 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 701 }
Chris@16 702 virtual string_type do_get_unit(duration_style style, hecto u, std::size_t pf) const
Chris@16 703 {
Chris@16 704 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 705 }
Chris@16 706 static string_type static_get_unit(duration_style style, hecto u, std::size_t pf)
Chris@16 707 {
Chris@16 708 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 709 }
Chris@16 710 virtual string_type do_get_unit(duration_style style, kilo u, std::size_t pf) const
Chris@16 711 {
Chris@16 712 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 713 }
Chris@16 714 static string_type static_get_unit(duration_style style, kilo u, std::size_t pf)
Chris@16 715 {
Chris@16 716 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 717 }
Chris@16 718 virtual string_type do_get_unit(duration_style style, mega u, std::size_t pf) const
Chris@16 719 {
Chris@16 720 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 721 }
Chris@16 722 static string_type static_get_unit(duration_style style, mega u, std::size_t pf)
Chris@16 723 {
Chris@16 724 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 725 }
Chris@16 726 virtual string_type do_get_unit(duration_style style, giga u, std::size_t pf) const
Chris@16 727 {
Chris@16 728 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 729 }
Chris@16 730 static string_type static_get_unit(duration_style style, giga u, std::size_t pf)
Chris@16 731 {
Chris@16 732 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 733 }
Chris@16 734 virtual string_type do_get_unit(duration_style style, tera u, std::size_t pf) const
Chris@16 735 {
Chris@16 736 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 737 }
Chris@16 738 static string_type static_get_unit(duration_style style, tera u, std::size_t pf)
Chris@16 739 {
Chris@16 740 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 741 }
Chris@16 742 virtual string_type do_get_unit(duration_style style, peta u, std::size_t pf) const
Chris@16 743 {
Chris@16 744 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 745 }
Chris@16 746 static string_type static_get_unit(duration_style style, peta u, std::size_t pf)
Chris@16 747 {
Chris@16 748 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 749 }
Chris@16 750 virtual string_type do_get_unit(duration_style style, exa u, std::size_t pf) const
Chris@16 751 {
Chris@16 752 return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf);
Chris@16 753 }
Chris@16 754 static string_type static_get_unit(duration_style style, exa u, std::size_t pf)
Chris@16 755 {
Chris@16 756 return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf);
Chris@16 757 }
Chris@16 758
Chris@16 759 protected:
Chris@16 760
Chris@16 761 /**
Chris@16 762 * @param style the duration style.
Chris@16 763 * @param u the period tag atto.
Chris@16 764 * @return depending on the value of @c style return the ratio_string symbol or prefix.
Chris@16 765 */
Chris@16 766 virtual string_type do_get_ratio_prefix(duration_style style, atto u) const
Chris@16 767 {
Chris@16 768 return static_get_ratio_prefix(style, u);
Chris@16 769 }
Chris@16 770 static string_type static_get_ratio_prefix(duration_style style, atto)
Chris@16 771 {
Chris@16 772 if (style == duration_style::symbol) return ratio_string<atto, CharT>::symbol();
Chris@16 773 return ratio_string<atto, CharT>::prefix();
Chris@16 774 }
Chris@16 775 virtual string_type do_get_ratio_prefix(duration_style style, femto u) const
Chris@16 776 {
Chris@16 777 return static_get_ratio_prefix(style, u);
Chris@16 778 }
Chris@16 779 static string_type static_get_ratio_prefix(duration_style style, femto)
Chris@16 780 {
Chris@16 781 if (style == duration_style::symbol) return ratio_string<femto, CharT>::symbol();
Chris@16 782 return ratio_string<femto, CharT>::prefix();
Chris@16 783 }
Chris@16 784 virtual string_type do_get_ratio_prefix(duration_style style, pico u) const
Chris@16 785 {
Chris@16 786 return static_get_ratio_prefix(style, u);
Chris@16 787 }
Chris@16 788 static string_type static_get_ratio_prefix(duration_style style, pico)
Chris@16 789 {
Chris@16 790 if (style == duration_style::symbol) return ratio_string<pico, CharT>::symbol();
Chris@16 791 return ratio_string<pico, CharT>::prefix();
Chris@16 792 }
Chris@16 793 virtual string_type do_get_ratio_prefix(duration_style style, nano u) const
Chris@16 794 {
Chris@16 795 return static_get_ratio_prefix(style, u);
Chris@16 796 }
Chris@16 797 static string_type static_get_ratio_prefix(duration_style style, nano)
Chris@16 798 {
Chris@16 799 if (style == duration_style::symbol) return ratio_string<nano, CharT>::symbol();
Chris@16 800 return ratio_string<nano, CharT>::prefix();
Chris@16 801 }
Chris@16 802 virtual string_type do_get_ratio_prefix(duration_style style, micro u) const
Chris@16 803 {
Chris@16 804 return static_get_ratio_prefix(style, u);
Chris@16 805 }
Chris@16 806 static string_type static_get_ratio_prefix(duration_style style, micro)
Chris@16 807 {
Chris@16 808 if (style == duration_style::symbol) return ratio_string<micro, CharT>::symbol();
Chris@16 809 return ratio_string<micro, CharT>::prefix();
Chris@16 810 }
Chris@16 811 virtual string_type do_get_ratio_prefix(duration_style style, milli u) const
Chris@16 812 {
Chris@16 813 return static_get_ratio_prefix(style, u);
Chris@16 814 }
Chris@16 815 static string_type static_get_ratio_prefix(duration_style style, milli)
Chris@16 816 {
Chris@16 817 if (style == duration_style::symbol) return ratio_string<milli, CharT>::symbol();
Chris@16 818 return ratio_string<milli, CharT>::prefix();
Chris@16 819 }
Chris@16 820 virtual string_type do_get_ratio_prefix(duration_style style, centi u) const
Chris@16 821 {
Chris@16 822 return static_get_ratio_prefix(style, u);
Chris@16 823 }
Chris@16 824 static string_type static_get_ratio_prefix(duration_style style, centi)
Chris@16 825 {
Chris@16 826 if (style == duration_style::symbol) return ratio_string<centi, CharT>::symbol();
Chris@16 827 return ratio_string<centi, CharT>::prefix();
Chris@16 828 }
Chris@16 829 virtual string_type do_get_ratio_prefix(duration_style style, deci u) const
Chris@16 830 {
Chris@16 831 return static_get_ratio_prefix(style, u);
Chris@16 832 }
Chris@16 833 static string_type static_get_ratio_prefix(duration_style style, deci)
Chris@16 834 {
Chris@16 835 if (style == duration_style::symbol) return ratio_string<deci, CharT>::symbol();
Chris@16 836 return ratio_string<deci, CharT>::prefix();
Chris@16 837 }
Chris@16 838 virtual string_type do_get_ratio_prefix(duration_style style, deca u) const
Chris@16 839 {
Chris@16 840 return static_get_ratio_prefix(style, u);
Chris@16 841 }
Chris@16 842 static string_type static_get_ratio_prefix(duration_style style, deca)
Chris@16 843 {
Chris@16 844 if (style == duration_style::symbol) return ratio_string<deca, CharT>::symbol();
Chris@16 845 return ratio_string<deca, CharT>::prefix();
Chris@16 846 }
Chris@16 847 virtual string_type do_get_ratio_prefix(duration_style style, hecto u) const
Chris@16 848 {
Chris@16 849 return static_get_ratio_prefix(style, u);
Chris@16 850 }
Chris@16 851 static string_type static_get_ratio_prefix(duration_style style, hecto)
Chris@16 852 {
Chris@16 853 if (style == duration_style::symbol) return ratio_string<hecto, CharT>::symbol();
Chris@16 854 return ratio_string<hecto, CharT>::prefix();
Chris@16 855 }
Chris@16 856 virtual string_type do_get_ratio_prefix(duration_style style, kilo u) const
Chris@16 857 {
Chris@16 858 return static_get_ratio_prefix(style, u);
Chris@16 859 }
Chris@16 860 static string_type static_get_ratio_prefix(duration_style style, kilo)
Chris@16 861 {
Chris@16 862 if (style == duration_style::symbol) return ratio_string<kilo, CharT>::symbol();
Chris@16 863 return ratio_string<kilo, CharT>::prefix();
Chris@16 864 }
Chris@16 865 virtual string_type do_get_ratio_prefix(duration_style style, mega u) const
Chris@16 866 {
Chris@16 867 return static_get_ratio_prefix(style, u);
Chris@16 868 }
Chris@16 869 static string_type static_get_ratio_prefix(duration_style style, mega)
Chris@16 870 {
Chris@16 871 if (style == duration_style::symbol) return ratio_string<mega, CharT>::symbol();
Chris@16 872 return ratio_string<mega, CharT>::prefix();
Chris@16 873 }
Chris@16 874 virtual string_type do_get_ratio_prefix(duration_style style, giga u) const
Chris@16 875 {
Chris@16 876 return static_get_ratio_prefix(style, u);
Chris@16 877 }
Chris@16 878 static string_type static_get_ratio_prefix(duration_style style, giga)
Chris@16 879 {
Chris@16 880 if (style == duration_style::symbol) return ratio_string<giga, CharT>::symbol();
Chris@16 881 return ratio_string<giga, CharT>::prefix();
Chris@16 882 }
Chris@16 883 virtual string_type do_get_ratio_prefix(duration_style style, tera u) const
Chris@16 884 {
Chris@16 885 return static_get_ratio_prefix(style, u);
Chris@16 886 }
Chris@16 887 static string_type static_get_ratio_prefix(duration_style style, tera)
Chris@16 888 {
Chris@16 889 if (style == duration_style::symbol) return ratio_string<tera, CharT>::symbol();
Chris@16 890 return ratio_string<tera, CharT>::prefix();
Chris@16 891 }
Chris@16 892 virtual string_type do_get_ratio_prefix(duration_style style, peta u) const
Chris@16 893 {
Chris@16 894 return static_get_ratio_prefix(style, u);
Chris@16 895 }
Chris@16 896 static string_type static_get_ratio_prefix(duration_style style, peta)
Chris@16 897 {
Chris@16 898 if (style == duration_style::symbol) return ratio_string<peta, CharT>::symbol();
Chris@16 899 return ratio_string<peta, CharT>::prefix();
Chris@16 900 }
Chris@16 901 virtual string_type do_get_ratio_prefix(duration_style style, exa u) const
Chris@16 902 {
Chris@16 903 return static_get_ratio_prefix(style, u);
Chris@16 904 }
Chris@16 905 static string_type static_get_ratio_prefix(duration_style style, exa)
Chris@16 906 {
Chris@16 907 if (style == duration_style::symbol) return ratio_string<exa, CharT>::symbol();
Chris@16 908 return ratio_string<exa, CharT>::prefix();
Chris@16 909 }
Chris@16 910
Chris@16 911 protected:
Chris@16 912 template <typename Period>
Chris@16 913 string_type* fill_units(string_type* it, Period) const
Chris@16 914 {
Chris@16 915 std::size_t pfs = do_get_plural_forms();
Chris@16 916 for (std::size_t pf = 0; pf < pfs; ++pf)
Chris@16 917 {
Chris@16 918 *it++ = do_get_unit(duration_style::prefix, Period(), pf);
Chris@16 919 }
Chris@16 920 *it++ = do_get_unit(duration_style::symbol, Period(), 0);
Chris@16 921 return it;
Chris@16 922 }
Chris@16 923 public:
Chris@16 924 template <typename Period>
Chris@16 925 static string_type* static_fill_units(string_type* it, Period)
Chris@16 926 {
Chris@16 927 std::size_t pfs = static_get_plural_forms();
Chris@16 928 for (std::size_t pf = 0; pf < pfs; ++pf)
Chris@16 929 {
Chris@16 930 *it++ = static_get_unit(duration_style::prefix, Period(), pf);
Chris@16 931 }
Chris@16 932 *it++ = static_get_unit(duration_style::symbol, Period(), 0);
Chris@16 933 return it;
Chris@16 934 }
Chris@16 935 static string_type* static_init_valid_units(string_type* it)
Chris@16 936 {
Chris@16 937 it = static_fill_units(it, atto());
Chris@16 938 it = static_fill_units(it, femto());
Chris@16 939 it = static_fill_units(it, pico());
Chris@16 940 it = static_fill_units(it, nano());
Chris@16 941 it = static_fill_units(it, micro());
Chris@16 942 it = static_fill_units(it, milli());
Chris@16 943 it = static_fill_units(it, centi());
Chris@16 944 it = static_fill_units(it, deci());
Chris@16 945 it = static_fill_units(it, deca());
Chris@16 946 it = static_fill_units(it, hecto());
Chris@16 947 it = static_fill_units(it, kilo());
Chris@16 948 it = static_fill_units(it, mega());
Chris@16 949 it = static_fill_units(it, giga());
Chris@16 950 it = static_fill_units(it, tera());
Chris@16 951 it = static_fill_units(it, peta());
Chris@16 952 it = static_fill_units(it, exa());
Chris@16 953 it = static_fill_units(it, ratio<1> ());
Chris@16 954 it = static_fill_units(it, ratio<60> ());
Chris@16 955 it = static_fill_units(it, ratio<3600> ());
Chris@16 956 return it;
Chris@16 957 }
Chris@16 958 };
Chris@16 959
Chris@16 960 namespace detail
Chris@16 961 {
Chris@16 962
Chris@16 963 template<typename CharT>
Chris@16 964 struct duration_units_default_initializer_t
Chris@16 965 {
Chris@16 966 duration_units_default_initializer_t()
Chris@16 967 {
Chris@16 968 if (!duration_units_default_holder<CharT>::initialized_)
Chris@16 969 {
Chris@16 970 typedef typename duration_units_default_holder<CharT>::string_type string_type;
Chris@16 971 duration_units_default_holder<CharT>::n_d_valid_units_ = new string_type[3];
Chris@16 972 duration_units_default_holder<CharT>::valid_units_ = new string_type[19 * 3];
Chris@16 973
Chris@16 974 string_type* it = duration_units_default_holder<CharT>::n_d_valid_units_;
Chris@16 975 it = duration_units_default<CharT>::static_fill_units(it, ratio<1> ());
Chris@16 976 it = duration_units_default<CharT>::static_init_valid_units(duration_units_default_holder<CharT>::valid_units_);
Chris@16 977
Chris@16 978 duration_units_default_holder<CharT>::initialized_ = true;
Chris@16 979 }
Chris@16 980 }
Chris@16 981 ~duration_units_default_initializer_t()
Chris@16 982 {
Chris@16 983 if (duration_units_default_holder<CharT>::initialized_)
Chris@16 984 {
Chris@16 985 delete[] duration_units_default_holder<CharT>::n_d_valid_units_;
Chris@16 986 duration_units_default_holder<CharT>::n_d_valid_units_ = 0;
Chris@16 987 delete[] duration_units_default_holder<CharT>::valid_units_;
Chris@16 988 duration_units_default_holder<CharT>::valid_units_ = 0;
Chris@16 989 duration_units_default_holder<CharT>::initialized_ = false;
Chris@16 990 }
Chris@16 991 }
Chris@16 992 };
Chris@16 993 namespace /**/
Chris@16 994 {
Chris@16 995 duration_units_default_initializer_t<char> duration_units_default_initializer;
Chris@16 996 duration_units_default_initializer_t<wchar_t> wduration_units_default_initializer;
Chris@16 997 } // namespace
Chris@16 998 }
Chris@16 999 } // chrono
Chris@16 1000
Chris@16 1001 } // boost
Chris@16 1002
Chris@16 1003 #endif // header