timestamp_base.hpp
Go to the documentation of this file.
1 
8 /*****************************************************************************
9 ** Ifdefs
10 *****************************************************************************/
11 
12 #ifndef ECL_TIME_TIMESTAMP_BASE_HPP_
13 #define ECL_TIME_TIMESTAMP_BASE_HPP_
14 
15 /*****************************************************************************
16 ** Includes
17 *****************************************************************************/
18 
19 #include <cstdlib>
20 #include <ecl/time_lite/types.hpp>
21 #include <ecl/config/macros.hpp>
23 #include "macros.hpp"
24 
25 /*****************************************************************************
26 ** Namespaces
27 *****************************************************************************/
28 
29 namespace ecl {
30 
31 /*****************************************************************************
32 ** Implementation
33 *****************************************************************************/
41 public:
42  /*********************
43  ** Constructors
44  **********************/
45  explicit TimeStampBase() {};
56  explicit TimeStampBase (const double& decimal_time_value);
66  TimeStampBase (const time_t &seconds, const long &nanoseconds);
67 
68  virtual ~TimeStampBase() {}
69 
70  /******************************************
71  ** Stamps
72  *******************************************/
83  const TimeStampBase& stamp (const double& decimal_time_value);
94  const TimeStampBase& stamp (const time_t &seconds, const long &nanoseconds);
95 
96  /******************************************
97  ** Accessors
98  *******************************************/
105  long sec() const { return time.tv_sec; }
112  long msec() const { return time.tv_nsec/1000000L; }
119  long usec() const { return time.tv_nsec/1000; }
126  long nsec() const { return time.tv_nsec; }
127 
134  operator double() const { return ( time.tv_sec + time.tv_nsec*0.000000001); }
135 
136  /******************************************
137  ** Comparison Operators
138  *******************************************/
144  bool operator==(const TimeStampBase& time_stamp);
150  bool operator!=(const TimeStampBase& time_stamp);
156  bool operator<=(const TimeStampBase& time_stamp);
162  bool operator>=(const TimeStampBase& time_stamp);
168  bool operator<(const TimeStampBase& time_stamp);
174  bool operator>(const TimeStampBase& time_stamp);
175 
176  /******************************************
177  ** Mathematical Operators
178  *******************************************/
184  TimeStampBase operator+(const TimeStampBase& time_stamp );
189  void operator+=(const TimeStampBase& time_stamp);
199  TimeStampBase operator-(const TimeStampBase& time_stamp );
208  void operator-=(const TimeStampBase& time_stamp);
209 
210  /******************************************
211  ** Insertion Operator
212  *******************************************/
213  template <typename OutputStream>
214  friend OutputStream& operator << ( OutputStream &ostream , const TimeStampBase& time_stamp );
215 
216 protected:
217  TimeStructure time;
218 };
219 
220 
221 /*****************************************************************************
222 ** Implementation [Insertion Operator]
223 *****************************************************************************/
224 
225 template <typename OutputStream>
226 OutputStream& operator <<( OutputStream &ostream , const TimeStampBase& time_stamp )
227 {
228  if ( ( time_stamp.time.tv_sec == 0 ) && (time_stamp.time.tv_nsec < 0 ) ) {
229  ostream << "-";
230  }
231  ostream << time_stamp.time.tv_sec << ".";
232  long nanoseconds = std::abs(time_stamp.time.tv_nsec);
233  if ( nanoseconds < 10 ) {
234  ostream << "00000000";
235  } else if ( nanoseconds < 100 ) {
236  ostream << "0000000";
237  } else if ( nanoseconds < 1000 ) {
238  ostream << "000000";
239  } else if ( nanoseconds < 10000 ) {
240  ostream << "00000";
241  } else if ( nanoseconds < 100000 ) {
242  ostream << "0000";
243  } else if ( nanoseconds < 1000000 ) {
244  ostream << "000";
245  } else if ( nanoseconds < 10000000 ) {
246  ostream << "00";
247  } else if ( nanoseconds < 100000000 ) {
248  ostream << "0";
249  }
250  ostream << nanoseconds;
251  return ostream;
252 }
253 
254 } // namespace ecl
255 
256 #endif /* ECL_TIME_TIMESTAMP_BASE_HPP_ */
257 
258 
259 
Embedded control libraries.
long nsec() const
Nanoseconds component (after removing seconds).
This class provides common functionality across platforms for the timestamps.
long msec() const
Milliseconds component (after removing seconds).
long usec() const
Microseconds component (after removing seconds).
OutputStream & operator<<(OutputStream &ostream, const TimeStampBase &time_stamp)
long sec() const
Seconds component.
#define ecl_time_PUBLIC
Definition: macros.hpp:37


ecl_time
Author(s): Daniel Stonier
autogenerated on Mon Feb 28 2022 22:18:29