MADARA  3.2.3
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 { namespace utility {
11 #else
12 #define MADARA_EXTERN_C
13 #endif
14 
15 #ifdef MADARA_FEATURE_SIMTIME
16 
17 typedef void (*sim_time_callback_fn)(uint64_t*, double*);
18 
22 MADARA_EXTERN_C sim_time_callback_fn set_sim_time_callback(
23  sim_time_callback_fn fn);
24 
37 MADARA_EXTERN_C void sim_time_notify(uint64_t time, double rate);
38 
40 MADARA_EXTERN_C const double minrate;
41 
42 #ifdef __cplusplus
43 constexpr bool simtime = true;
44 
45 class SimTime {
46 private:
47  static std::mutex mutex_;
48  static sim_time_callback_fn callback_;
49 
50  static uint64_t last_realtime_;
51  static uint64_t last_simtime_;
52  static double last_rate_;
53 
54 public:
55  SimTime() = delete;
56 
57  static uint64_t last_realtime() {
58  std::lock_guard<std::mutex> guard(mutex_);
59  return last_realtime_;
60  }
61 
62  static uint64_t last_simtime() {
63  std::lock_guard<std::mutex> guard(mutex_);
64  return last_simtime_;
65  }
66 
67  static double last_rate() {
68  std::lock_guard<std::mutex> guard(mutex_);
69  return last_rate_;
70  }
71 
72  static uint64_t realtime();
73  static uint64_t time();
74  static double rate();
75  static uint64_t duration(uint64_t sim_duration);
76  static uint64_t future(uint64_t sim_offset);
77 
78  friend sim_time_callback_fn set_sim_time_callback(
79  sim_time_callback_fn fn);
80 
81  friend void sim_time_notify(uint64_t, double);
82 };
83 
84 #endif // ifdef __cplusplus
85 #else
86 #ifdef __cplusplus
87 constexpr bool simtime = false;
88 #endif
89 #endif
90 
91 #ifdef __cplusplus
92 } } // namespace madara::utility
93 #endif
94 
95 #endif
#define MADARA_EXTERN_C
Definition: SimTime.h:12
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:14
Copyright (c) 2015 Carnegie Mellon University.