MADARA  3.4.1
SimTime.h
Go to the documentation of this file.
1 #ifndef MADARA_UTILITY_SIMTIME_H_
2 #define MADARA_UTILITY_SIMTIME_H_
3 
4 #ifdef __cplusplus
5 #include <mutex>
6 #include <madara/MadaraExport.h>
7 
8 #define MADARA_EXTERN_C extern "C" MADARA_EXPORT
9 
10 namespace madara
11 {
12 namespace utility
13 {
14 #else
15 #define MADARA_EXTERN_C
16 #endif
17 
18 #ifdef MADARA_FEATURE_SIMTIME
19 
20 typedef void (*sim_time_callback_fn)(uint64_t*, double*);
21 
25 MADARA_EXTERN_C sim_time_callback_fn set_sim_time_callback(
26  sim_time_callback_fn fn);
27 
40 MADARA_EXTERN_C void sim_time_notify(uint64_t time, double rate);
41 
43 MADARA_EXTERN_C const double minrate;
44 
45 #ifdef __cplusplus
46 constexpr bool simtime = true;
47 
48 class MADARA_EXPORT SimTime
49 {
50 private:
51  static std::mutex mutex_;
52  static sim_time_callback_fn callback_;
53 
54  static uint64_t last_realtime_;
55  static uint64_t last_simtime_;
56  static double last_rate_;
57 
58 public:
59  SimTime() = delete;
60 
65  static uint64_t last_realtime()
66  {
67  std::lock_guard<std::mutex> guard(mutex_);
68  return last_realtime_;
69  }
70 
75  static uint64_t last_simtime()
76  {
77  std::lock_guard<std::mutex> guard(mutex_);
78  return last_simtime_;
79  }
80 
84  static double last_rate()
85  {
86  std::lock_guard<std::mutex> guard(mutex_);
87  return last_rate_;
88  }
89 
93  static uint64_t realtime();
94 
99  static uint64_t realtime(uint64_t simtime);
100 
104  static uint64_t time();
105 
109  static double rate();
110 
114  static uint64_t duration(uint64_t sim_duration);
115 
119  static uint64_t future(uint64_t sim_offset);
120 
121  friend sim_time_callback_fn utility::set_sim_time_callback(sim_time_callback_fn fn);
122 
123  friend void utility::sim_time_notify(uint64_t, double);
124 };
125 
126 #endif // ifdef __cplusplus
127 #else
128 #ifdef __cplusplus
129 constexpr bool simtime = false;
130 #endif
131 #endif
132 
133 #ifdef __cplusplus
134 }
135 } // namespace madara::utility
136 #endif
137 
138 #endif
#define MADARA_EXTERN_C
Definition: SimTime.h:15
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:15
Copyright(c) 2020 Galois.