Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / date_time / iso_format.hpp
1 #ifndef ISO_FORMAT_HPP___
2 #define ISO_FORMAT_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 or http://www.boost.org/LICENSE-1.0)
8  * Author: Jeff Garland, Bart Garst
9  * $Date: 2004/08/29 19:31:12 $
10  */
11
12 #include "boost/date_time/parse_format_base.hpp"
13
14 namespace boost {
15 namespace date_time {
16
17 //! Class to provide common iso formatting spec
18 template<class charT>
19 class iso_format_base {
20 public:
21   //! Describe month format -- its an integer in iso format
22   static month_format_spec month_format()
23   {
24     return month_as_integer;
25   }
26
27   //! String used printed is date is invalid
28   static const charT* not_a_date()
29   {     
30     return "not-a-date-time";
31   }
32   //! String used to for positive infinity value
33   static const charT* pos_infinity()
34   {
35     return "+infinity";
36   }
37   //! String used to for positive infinity value
38   static const charT* neg_infinity()
39   {
40     return "-infinity";
41   }
42
43   //! ISO char for a year -- used in durations
44   static charT year_sep_char()
45   {
46     return 'Y';
47   }
48   //! ISO char for a month
49   static charT month_sep_char()
50   {
51     return '-';
52   }
53   //! ISO char for a day
54   static charT day_sep_char()
55   {
56     return '-';
57   }
58   //! char for minute
59   static charT hour_sep_char()
60   {
61     return ':';
62   }
63   //! char for minute
64   static charT minute_sep_char()
65   {
66     return ':';
67   }
68   //! char for second
69   static charT second_sep_char()
70   {
71     return ':';
72   }
73   //! ISO char for a period
74   static charT period_start_char()
75   {
76     return 'P';
77   }
78   //! Used in time in mixed strings to set start of time
79   static charT time_start_char()
80   {
81     return 'T';
82   }
83
84   //! Used in mixed strings to identify start of a week number
85   static charT week_start_char()
86   {
87     return 'W';
88   }
89
90   //! Separators for periods
91   static charT period_sep_char()
92   {
93     return '/';
94   }
95   //! Separator for hh:mm:ss
96   static charT time_sep_char()
97   {
98     return ':';
99   }
100   //! Preferred Separator for hh:mm:ss,decimal_fraction
101   static charT fractional_time_sep_char()
102   {
103     return ',';
104   }
105
106   static bool is_component_sep(charT sep)
107   {
108     switch(sep) {
109     case 'H':
110     case 'M':
111     case 'S':
112     case 'W':
113     case 'T':
114     case 'Y':
115     case 'D':return true;
116     default:
117       return false;
118     }
119   }
120
121   static bool is_fractional_time_sep(charT sep)
122   {
123     switch(sep) {
124     case ',':
125     case '.': return true;
126     default: return false;
127     }
128   }
129   static bool is_timezone_sep(charT sep)
130   {
131     switch(sep) {
132     case '+':
133     case '-': return true;
134     default: return false;
135     }
136   }
137   static charT element_sep_char()
138   {
139     return '-';
140   }
141
142 };
143
144 #ifndef BOOST_NO_STD_WSTRING
145
146 //! Class to provide common iso formatting spec
147 template<>
148 class iso_format_base<wchar_t> {
149 public:
150   //! Describe month format -- its an integer in iso format
151   static month_format_spec month_format()
152   {
153     return month_as_integer;
154   }
155
156   //! String used printed is date is invalid
157   static const wchar_t* not_a_date()
158   {      
159     return L"not-a-date-time";
160   }
161   //! String used to for positive infinity value
162   static const wchar_t* pos_infinity()
163   {
164     return L"+infinity";
165   }
166   //! String used to for positive infinity value
167   static const wchar_t* neg_infinity()
168   {
169     return L"-infinity";
170   }
171
172   //! ISO char for a year -- used in durations
173   static wchar_t year_sep_char()
174   {
175     return 'Y';
176   }
177   //! ISO char for a month
178   static wchar_t month_sep_char()
179   {
180     return '-';
181   }
182   //! ISO char for a day
183   static wchar_t day_sep_char()
184   {
185     return '-';
186   }
187   //! char for minute
188   static wchar_t hour_sep_char()
189   {
190     return ':';
191   }
192   //! char for minute
193   static wchar_t minute_sep_char()
194   {
195     return ':';
196   }
197   //! char for second
198   static wchar_t second_sep_char()
199   {
200     return ':';
201   }
202   //! ISO char for a period
203   static wchar_t period_start_char()
204   {
205     return 'P';
206   }
207   //! Used in time in mixed strings to set start of time
208   static wchar_t time_start_char()
209   {
210     return 'T';
211   }
212
213   //! Used in mixed strings to identify start of a week number
214   static wchar_t week_start_char()
215   {
216     return 'W';
217   }
218
219   //! Separators for periods
220   static wchar_t period_sep_char()
221   {
222     return '/';
223   }
224   //! Separator for hh:mm:ss
225   static wchar_t time_sep_char()
226   {
227     return ':';
228   }
229   //! Preferred Separator for hh:mm:ss,decimal_fraction
230   static wchar_t fractional_time_sep_char()
231   {
232     return ',';
233   }
234
235   static bool is_component_sep(wchar_t sep)
236   {
237     switch(sep) {
238     case 'H':
239     case 'M':
240     case 'S':
241     case 'W':
242     case 'T':
243     case 'Y':
244     case 'D':return true;
245     default:
246       return false;
247     }
248   }
249
250   static bool is_fractional_time_sep(wchar_t sep)
251   {
252     switch(sep) {
253     case ',':
254     case '.': return true;
255     default: return false;
256     }
257   }
258   static bool is_timezone_sep(wchar_t sep)
259   {
260     switch(sep) {
261     case '+':
262     case '-': return true;
263     default: return false;
264     }
265   }
266   static wchar_t element_sep_char()
267   {
268     return '-';
269   }
270
271 };
272
273 #endif // BOOST_NO_STD_WSTRING
274
275 //! Format description for iso normal YYYYMMDD
276 template<class charT>
277 class iso_format : public iso_format_base<charT> {
278 public:
279   //! The ios standard format doesn't use char separators
280   static bool has_date_sep_chars()
281   {
282     return false;
283   }
284 };
285
286 //! Extended format uses seperators YYYY-MM-DD
287 template<class charT>
288 class iso_extended_format : public iso_format_base<charT> {
289 public:
290   //! Extended format needs char separators
291   static bool has_date_sep_chars()
292   {
293     return true;
294   }
295
296 };
297
298 } } //namespace date_time
299
300
301
302
303 #endif