New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
time_formatting_streams.hpp in vendors/XIOS/current/extern/boost/include/boost/date_time – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/date_time/time_formatting_streams.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 3.7 KB
Line 
1#ifndef DATE_TIME_TIME_FORMATTING_STREAMS_HPP___
2#define DATE_TIME_TIME_FORMATTING_STREAMS_HPP___
3
4/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
5 * Use, modification and distribution is subject to the
6 * Boost Software License, Version 1.0. (See accompanying
7 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8 * Author: Jeff Garland, Bart Garst
9 * $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $
10 */
11
12#include <boost/date_time/compiler_config.hpp>
13
14#ifndef BOOST_DATE_TIME_NO_LOCALE
15
16#include <locale>
17#include <iomanip>
18#include <iostream>
19#include <boost/date_time/date_formatting_locales.hpp>
20#include <boost/date_time/time_resolution_traits.hpp>
21
22namespace boost {
23namespace date_time {
24
25
26  //! Put a time type into a stream using appropriate facets
27  template<class time_duration_type,
28           class charT = char>
29  class ostream_time_duration_formatter
30  {
31  public:
32    typedef std::basic_ostream<charT> ostream_type;
33    typedef typename time_duration_type::fractional_seconds_type fractional_seconds_type;
34
35    //! Put time into an ostream
36    static void duration_put(const time_duration_type& td, 
37                             ostream_type& os)
38    {
39      if(td.is_special()) {
40        os << td.get_rep(); 
41      }
42      else {
43        charT fill_char = '0';
44        if(td.is_negative()) {
45          os << '-';
46        }
47        os  << std::setw(2) << std::setfill(fill_char) 
48            << absolute_value(td.hours()) << ":";
49        os  << std::setw(2) << std::setfill(fill_char) 
50            << absolute_value(td.minutes()) << ":";
51        os  << std::setw(2) << std::setfill(fill_char) 
52            << absolute_value(td.seconds());
53        fractional_seconds_type frac_sec = 
54          absolute_value(td.fractional_seconds());
55        if (frac_sec != 0) {
56          os  << "." 
57              << std::setw(time_duration_type::num_fractional_digits())
58              << std::setfill(fill_char)
59              << frac_sec;
60        }
61      } // else
62    } // duration_put
63  }; //class ostream_time_duration_formatter
64
65  //! Put a time type into a stream using appropriate facets
66  template<class time_type,
67           class charT = char>
68  class ostream_time_formatter
69  {
70  public:
71    typedef std::basic_ostream<charT> ostream_type;
72    typedef typename time_type::date_type date_type;
73    typedef typename time_type::time_duration_type time_duration_type;
74    typedef ostream_time_duration_formatter<time_duration_type, charT> duration_formatter;
75
76    //! Put time into an ostream
77    static void time_put(const time_type& t, 
78                         ostream_type& os)
79    {
80      date_type d = t.date();
81      os << d;
82      if(!d.is_infinity() && !d.is_not_a_date())
83      {
84        os << " "; //TODO: fix the separator here.
85        duration_formatter::duration_put(t.time_of_day(), os);
86      }
87     
88    } // time_to_ostream   
89  }; //class ostream_time_formatter
90
91
92  //! Put a time period into a stream using appropriate facets
93  template<class time_period_type,
94           class charT = char>
95  class ostream_time_period_formatter
96  {
97  public:
98    typedef std::basic_ostream<charT> ostream_type;
99    typedef typename time_period_type::point_type time_type;
100    typedef ostream_time_formatter<time_type, charT> time_formatter;
101
102    //! Put time into an ostream
103    static void period_put(const time_period_type& tp, 
104                           ostream_type& os)
105    {
106      os << '['; //TODO: facet or manipulator for periods?
107      time_formatter::time_put(tp.begin(), os);
108      os << '/'; //TODO: facet or manipulator for periods?
109      time_formatter::time_put(tp.last(), os);
110      os << ']'; 
111
112    } // period_put
113
114  }; //class ostream_time_period_formatter
115
116
117 
118} } //namespace date_time
119
120#endif //BOOST_DATE_TIME_NO_LOCALE
121
122#endif
Note: See TracBrowser for help on using the repository browser.