μHAL (v2.6.5)
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 
47  template< time_element T0, char D0 ,
48  time_element T1 , char D1 ,
49  time_element T2 , char D2 ,
50  time_element T3 , char D3 ,
51  time_element T4 , char D4 ,
52  time_element T5 , char D5 ,
53  time_element T6 >
55  {
57  }
58 
59 
60  template< time_element T0, char D0 ,
61  time_element T1 , char D1 ,
62  time_element T2 , char D2 ,
63  time_element T3 , char D3 ,
64  time_element T4 , char D4 ,
65  time_element T5 >
67  {
69  }
70 
71 
72  template< time_element T0, char D0 ,
73  time_element T1 , char D1 ,
74  time_element T2 , char D2 ,
75  time_element T3 , char D3 ,
76  time_element T4 >
78  {
80  }
81 
82 
83  template< time_element T0, char D0 ,
84  time_element T1 , char D1 ,
85  time_element T2 , char D2 ,
86  time_element T3 >
88  {
90  }
91 
92 
93  template< time_element T0, char D0 ,
94  time_element T1 , char D1 ,
95  time_element T2 >
97  {
99  }
100 
101 
102  template< time_element T0, char D0 ,
103  time_element T1 >
105  {
107  }
108 
109 
110  template< time_element T0 >
112  {
114  }
115 
116 
117 
118 
119 
120 
121 
122  template< time_element T0, char D0 ,
123  time_element T1 , char D1 ,
124  time_element T2 , char D2 ,
125  time_element T3 , char D3 ,
126  time_element T4 , char D4 ,
127  time_element T5 , char D5 ,
128  time_element T6 >
129  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,D5,T6> >& aTime )
130  {
131  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
132  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
133  aStr << D0;
134  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
135  aStr << D1;
136  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
137  aStr << D2;
138  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
139  aStr << D3;
140  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
141  aStr << D4;
142  print< T5 > ( aStr , lLocalTime , aTime.value().tv_usec );
143  aStr << D5;
144  print< T6 > ( aStr , lLocalTime , aTime.value().tv_usec );
145  return aStr;
146  }
147 
148  template< time_element T0, char D0 ,
149  time_element T1 , char D1 ,
150  time_element T2 , char D2 ,
151  time_element T3 , char D3 ,
152  time_element T4 , char D4 ,
153  time_element T5 >
154  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,D4,T5,' ',null> >& aTime )
155  {
156  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
157  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
158  aStr << D0;
159  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
160  aStr << D1;
161  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
162  aStr << D2;
163  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
164  aStr << D3;
165  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
166  aStr << D4;
167  print< T5 > ( aStr , lLocalTime , aTime.value().tv_usec );
168  return aStr;
169  }
170 
171  template< time_element T0, char D0 ,
172  time_element T1 , char D1 ,
173  time_element T2 , char D2 ,
174  time_element T3 , char D3 ,
175  time_element T4 >
176  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,D3,T4,' ',null,' ',null> >& aTime )
177  {
178  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
179  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
180  aStr << D0;
181  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
182  aStr << D1;
183  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
184  aStr << D2;
185  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
186  aStr << D3;
187  print< T4 > ( aStr , lLocalTime , aTime.value().tv_usec );
188  return aStr;
189  }
190 
191  template< time_element T0, char D0 ,
192  time_element T1 , char D1 ,
193  time_element T2 , char D2 ,
194  time_element T3 >
195  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,D2,T3,' ',null,' ',null,' ',null> >& aTime )
196  {
197  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
198  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
199  aStr << D0;
200  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
201  aStr << D1;
202  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
203  aStr << D2;
204  print< T3 > ( aStr , lLocalTime , aTime.value().tv_usec );
205  return aStr;
206  }
207 
208  template< time_element T0, char D0 ,
209  time_element T1 , char D1 ,
210  time_element T2 >
211  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,D1,T2,' ',null,' ',null,' ',null,' ',null> >& aTime )
212  {
213  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
214  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
215  aStr << D0;
216  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
217  aStr << D1;
218  print< T2 > ( aStr , lLocalTime , aTime.value().tv_usec );
219  return aStr;
220  }
221 
222  template< time_element T0, char D0 ,
223  time_element T1 >
224  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,D0,T1,' ',null,' ',null,' ',null,' ',null,' ',null> >& aTime )
225  {
226  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
227  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
228  aStr << D0;
229  print< T1 > ( aStr , lLocalTime , aTime.value().tv_usec );
230  return aStr;
231  }
232 
233  template< time_element T0 >
234  std::ostream& operator<< ( std::ostream& aStr , const _Time< TimeFmt<T0,' ',null,' ',null,' ',null,' ',null,' ',null,' ',null> >& aTime )
235  {
236  tm* lLocalTime ( localtime ( &aTime.value().tv_sec ) );
237  print< T0 > ( aStr , lLocalTime , aTime.value().tv_usec );
238  return aStr;
239  }
240 
241 
242 
243 
244  template< typename FORMAT >
245  _Time< FORMAT > Time ( const timeval& aTime , const FORMAT& aFmt )
246  {
247  return _Time< FORMAT > ( aTime );
248  }
249 
250 
251 }
252 
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...