μHAL (v2.7.9)
Part of the IPbus software repository
log_inserters.time.hxx
Go to the documentation of this file.
1 /*
2 ---------------------------------------------------------------------------
3 
4  This file is part of uHAL.
5 
6  uHAL is a hardware access library and programming framework
7  originally developed for upgrades of the Level-1 trigger of the CMS
8  experiment at CERN.
9 
10  uHAL is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  uHAL is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22 
23 
24  Andrew Rose, Imperial College, London
25  email: awr01 <AT> imperial.ac.uk
26 
27  Marc Magrans de Abril, CERN
28  email: marc.magrans.de.abril <AT> cern.ch
29 
30 ---------------------------------------------------------------------------
31 */
32 
33 
34 #include <ostream> // for operator<<, ostream
35 #include <time.h> // for tm
36 
37 
38 // Forward declarations
39 struct timeval;
40 struct tm;
41 
42 
43 namespace uhal
44 {
45 
46  template< time_element T0, char D0 ,
47  time_element T1 , char D1 ,
48  time_element T2 , char D2 ,
49  time_element T3 , char D3 ,
50  time_element T4 , char D4 ,
51  time_element T5 , char D5 ,
52  time_element T6 >
54  {
56  }
57 
58 
59  template< time_element T0, char D0 ,
60  time_element T1 , char D1 ,
61  time_element T2 , char D2 ,
62  time_element T3 , char D3 ,
63  time_element T4 , char D4 ,
64  time_element T5 >
65  _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,' ',null> > Time ( const timeval& aTime )
66  {
67  return _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,' ',null> > ( aTime );
68  }
69 
70 
71  template< time_element T0, char D0 ,
72  time_element T1 , char D1 ,
73  time_element T2 , char D2 ,
74  time_element T3 , char D3 ,
75  time_element T4 >
76  _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,' ',null,' ',null> > Time ( const timeval& aTime )
77  {
78  return _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,' ',null,' ',null> > ( aTime );
79  }
80 
81 
82  template< time_element T0, char D0 ,
83  time_element T1 , char D1 ,
84  time_element T2 , char D2 ,
85  time_element T3 >
86  _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,' ',null,' ',null,' ',null> > Time ( const timeval& aTime )
87  {
88  return _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,' ',null,' ',null,' ',null> > ( aTime );
89  }
90 
91 
92  template< time_element T0, char D0 ,
93  time_element T1 , char D1 ,
94  time_element T2 >
95  _Time< TimeFmt<T0,D0,T1,D1,T2,' ',null,' ',null,' ',null,' ',null> > Time ( const timeval& aTime )
96  {
97  return _Time< TimeFmt<T0,D0,T1,D1,T2,' ',null,' ',null,' ',null,' ',null> > ( aTime );
98  }
99 
100 
101  template< time_element T0, char D0 ,
102  time_element T1 >
103  _Time< TimeFmt<T0,D0,T1,' ',null,' ',null,' ',null,' ',null,' ',null> > Time ( const timeval& aTime )
104  {
105  return _Time< TimeFmt<T0,D0,T1,' ',null,' ',null,' ',null,' ',null,' ',null> > ( aTime );
106  }
107 
108 
109  template< time_element T0 >
110  _Time< TimeFmt<T0,' ',null,' ',null,' ',null,' ',null,' ',null,' ',null> > Time ( const timeval& aTime )
111  {
112  return _Time< TimeFmt<T0,' ',null,' ',null,' ',null,' ',null,' ',null,' ',null> > ( aTime );
113  }
114 
115 
116 
117 
118  template< time_element T0, char D0 ,
119  time_element T1 , char D1 ,
120  time_element T2 , char D2 ,
121  time_element T3 , char D3 ,
122  time_element T4 , char D4 ,
123  time_element T5 , char D5 ,
124  time_element T6 >
125  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,D5,T6> >& aTime )
126  {
127  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
128  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
129  aStr << D0;
130  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
131  aStr << D1;
132  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
133  aStr << D2;
134  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
135  aStr << D3;
136  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
137  aStr << D4;
138  print< T5 > ( aStr , lLocalTime , aTime.value().tv_usec );
139  aStr << D5;
140  print< T6 > ( aStr , lLocalTime , aTime.value().tv_usec );
141  return aStr;
142  }
143 
144  template< time_element T0, char D0 ,
145  time_element T1 , char D1 ,
146  time_element T2 , char D2 ,
147  time_element T3 , char D3 ,
148  time_element T4 , char D4 ,
149  time_element T5 >
150  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,' ',null> >& aTime )
151  {
152  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
153  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
154  aStr << D0;
155  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
156  aStr << D1;
157  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
158  aStr << D2;
159  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
160  aStr << D3;
161  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
162  aStr << D4;
163  print< T5 > ( aStr , lLocalTime , aTime.value().tv_usec );
164  return aStr;
165  }
166 
167  template< time_element T0, char D0 ,
168  time_element T1 , char D1 ,
169  time_element T2 , char D2 ,
170  time_element T3 , char D3 ,
171  time_element T4 >
172  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,' ',null,' ',null> >& aTime )
173  {
174  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
175  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
176  aStr << D0;
177  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
178  aStr << D1;
179  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
180  aStr << D2;
181  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
182  aStr << D3;
183  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
184  return aStr;
185  }
186 
187  template< time_element T0, char D0 ,
188  time_element T1 , char D1 ,
189  time_element T2 , char D2 ,
190  time_element T3 >
191  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,' ',null,' ',null,' ',null> >& aTime )
192  {
193  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
194  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
195  aStr << D0;
196  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
197  aStr << D1;
198  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
199  aStr << D2;
200  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
201  return aStr;
202  }
203 
204  template< time_element T0, char D0 ,
205  time_element T1 , char D1 ,
206  time_element T2 >
207  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,' ',null,' ',null,' ',null,' ',null> >& aTime )
208  {
209  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
210  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
211  aStr << D0;
212  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
213  aStr << D1;
214  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
215  return aStr;
216  }
217 
218  template< time_element T0, char D0 ,
219  time_element T1 >
220  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,' ',null,' ',null,' ',null,' ',null,' ',null> >& aTime )
221  {
222  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
223  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
224  aStr << D0;
225  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
226  return aStr;
227  }
228 
229  template< time_element T0 >
230  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,' ',null,' ',null,' ',null,' ',null,' ',null,' ',null> >& aTime )
231  {
232  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
233  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
234  return aStr;
235  }
236 
237 
238 
239 
240  template< typename FORMAT >
241  _Time< FORMAT > Time ( const timeval& aTime , const FORMAT& aFmt )
242  {
243  return _Time< FORMAT > ( aTime );
244  }
245 
246 }
247 
uhal::time_element
time_element
Enumerated type defining the different elements which can be used for formatting a time.
Definition: log_inserters.time.hpp:55
uhal::operator<<
std::ostream & operator<<(std::ostream &aStr, const uhal::HttpResponseType &aHttpResponse)
Definition: HttpResponseGrammar.cpp:41
uhal::_Time
Forward declaration.
Definition: log_inserters.time.hpp:82
uhal
Definition: HttpResponseGrammar.hpp:49
uhal::TimeFmt
A struct whose template parameters represent a time format.
Definition: log_inserters.time.hpp:75
uhal::Time
_Time< DefaultTimeFmt > Time(const timeval &aTime)
Helper function which wrap the template uglyness in a pretty package.
Definition: log_inserters.time.hxx:53