μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
39struct timeval;
40struct tm;
41
42
43namespace 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 >
66 {
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 >
77 {
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 >
87 {
89 }
90
91
92 template< time_element T0, char D0 ,
93 time_element T1 , char D1 ,
94 time_element T2 >
96 {
98 }
99
100
101 template< time_element T0, char D0 ,
102 time_element T1 >
104 {
106 }
107
108
109 template< time_element T0 >
111 {
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
Forward declaration.
_Time< DefaultTimeFmt > Time(const timeval &aTime)
Helper function which wrap the template uglyness in a pretty package.
time_element
Enumerated type defining the different elements which can be used for formatting a time.
std::ostream & operator<<(std::ostream &aStr, const uhal::HttpResponseType &aHttpResponse)
A struct whose template parameters represent a time format.