jle_cpp_tk  0.0 2015-04-03 sh1:"d699093732dd5f321606d0ff7a6b63b229f1922c"
A small, safe, selft contained, soft-realtime C++ toolkit
chrono.h
1 #ifndef JLE_CHRONO_H
2 #define JLE_CHRONO_H
3 
4 #include <chrono>
5 #include <ostream>
6 using namespace std::literals;
7 
8 
9 
16 namespace jle {
17 
19  namespace chrono {
20 
21  //using duration = std::chrono::milliseconds;
22  struct duration : public std::chrono::milliseconds
23  {
24  duration(const std::chrono::milliseconds& cms) : std::chrono::milliseconds(cms) {};
25 
26  template<typename T, typename __p>
27  duration(const std::chrono::duration<T, __p> &d)
28  : std::chrono::milliseconds(std::chrono::duration_cast<std::chrono::milliseconds>(d))
29  {
30  }
31 
32  };
33 
34 
35  struct year { int __value; };
36  struct month { int __value; };
37  struct day { int __value; };
38 
39 
42  class time_point {
43  std::chrono::steady_clock::time_point tp;
44  // todo: correction
45 
46  time_point(const std::chrono::steady_clock::time_point& _tp) : tp(_tp) {}
47 
48 
49  public:
50  time_point()=delete;
51  time_point(const time_point&)=default;
53  time_point& operator=(const time_point&)=default;
54  time_point& operator=( time_point&&);
55 
56  time_point& operator += (const duration& dtn);
57  time_point& operator -= (const duration& dtn);
58  time_point operator + (const duration& dtn) const;
59  time_point operator - (const duration& dtn) const;
60  duration operator - (const time_point& _tp) const;
61  bool operator == (const time_point& rhs) const;
62  bool operator != (const time_point& rhs) const;
63  bool operator < (const time_point& rhs) const;
64  bool operator > (const time_point& rhs) const;
65  bool operator >= (const time_point& rhs) const;
66  bool operator <= (const time_point& rhs) const;
67 
68 
69  friend time_point now (void);
70  friend time_point today(void);
71  friend time_point make_from_date (const year& y, const month& m, const day& d);
72 
73  friend std::tuple<std::tm, int> get_tm_millisecs(const jle::chrono::time_point& tp);
74  };
75 
76  time_point now (void);
77 
78  time_point today (void);
79 
80  time_point make_from_date (const year&, const month&, const day&);
81 
82 
85  std::tuple<std::tm, int> get_tm_millisecs(const jle::chrono::time_point& tp);
86 
87 
88  std::ostream& operator<<(std::ostream& out, const jle::chrono::time_point &);
89  std::ostream& operator<<(std::ostream& out, const jle::chrono::duration &);
90 
91 
92 }; }; // namespace jle { namespace chrono {
93 
94 
95 template<typename T, typename __p>
96 std::ostream& operator<<(std::ostream& out, const std::chrono::duration<T, __p> &d)
97 {
98  return operator<<(out, jle::chrono::duration(std::chrono::duration_cast<std::chrono::milliseconds>(d)));
99 }
100 
101 
102 
103 #endif // JLE_CHRONO_H
Definition: chrono.h:37
similar to std::chrono::time_point but monotonic with adjustments to system_clock ...
Definition: chrono.h:42
Definition: chrono.h:35
Definition: chrono.h:36
std::tuple< std::tm, int > get_tm_millisecs(const jle::chrono::time_point &tp)
get a std::tm and milliseconds in int from time_point
Definition: chrono.cpp:149
Definition: chrono.h:22
generic namespace
Definition: alarm.cpp:12