CARMA C++
Delay.h
1 #ifndef CARMA_UTIL_DELAY_H
2 #define CARMA_UTIL_DELAY_H
3 
10 #include <iostream>
11 
12 namespace carma {
13  namespace services {
14 
18  class Delay {
19  public:
20 
24  Delay();
25 
29  virtual ~Delay();
30 
34  void setDelayInMeters(double delayInMeters) {
35  nanoSeconds_ = delayInMeters / lightSpeed_ * nanoSecPerSec_;
36  }
37 
41  void setDelayRateInMeters(double delayRateInMeters) {
42  dNanoSeconds_ = delayRateInMeters / lightSpeed_ * nanoSecPerSec_;
43  }
44 
48  void setDelayInNanoSeconds(double delayInNanoSec) {
49  nanoSeconds_ = delayInNanoSec;
50  }
51 
55  void setDelayRateInNanoSeconds(double delayRateInNanoSec) {
56  dNanoSeconds_ = delayRateInNanoSec;
57  }
58 
62  inline double meters() const {
63  return nanoSeconds_ / nanoSecPerSec_ * lightSpeed_;
64  }
65 
69  inline double metersPerSecond() const {
70  return dNanoSeconds_ / nanoSecPerSec_ * lightSpeed_;
71  }
72 
76  inline double nanoSeconds() const {
77  return nanoSeconds_;
78  }
79 
83  inline double nanoSecondsPerSecond() const {
84  return dNanoSeconds_;
85  }
86 
90  inline double secondsPerSecond() const {
91  return dNanoSeconds_ / nanoSecPerSec_;
92  }
93 
97  const Delay operator+(const Delay& delay) const;
98  Delay& operator+=(const Delay& delay);
99  Delay& operator+=(const Delay delay);
100 
104  const Delay operator-(const Delay& delay) const;
105  Delay& operator-=(const Delay& delay);
106  Delay& operator-=(const Delay delay);
107 
111  // friend std::ostream& operator<<(std::ostream& os, Delay& delay);
112  friend std::ostream& operator<<(std::ostream& os, Delay delay);
113 
114  inline void flipDelay() {
115  nanoSeconds_ *= -1;
116  }
117 
118  inline void flipRate() {
119  dNanoSeconds_ *= -1;
120  }
121 
122  private:
123 
127  static const double lightSpeed_ = 2.99792458e8;
128  static const double nanoSecPerSec_ = 1e9;
129 
130  double nanoSeconds_;
131  double dNanoSeconds_;
132 
133  }; // End class Delay
134  std::ostream& operator<<(std::ostream& os, Delay delay);
135  } // End namespace util
136 } // End namespace carma
137 
138 
139 
140 #endif // End #ifndef CARMA_UTIL_DELAY_H
double metersPerSecond() const
Get the delay rate, in meters/sec.
Definition: Delay.h:69
double meters() const
Get the delay, in meters.
Definition: Delay.h:62
const Delay operator+(const Delay &delay) const
Add two Delays.
friend std::ostream & operator<<(std::ostream &os, Delay delay)
Allows cout &lt;&lt; Delay.
void setDelayInMeters(double delayInMeters)
Set the delay, in meters.
Definition: Delay.h:34
const Delay operator-(const Delay &delay) const
Subtract two Delays.
Trivial class for handling delays.
Definition: Delay.h:18
void setDelayRateInNanoSeconds(double delayRateInNanoSec)
Set the delay rate, in nanoSeconds/second.
Definition: Delay.h:55
double secondsPerSecond() const
Get the delay rate, in seconds/sec.
Definition: Delay.h:90
void setDelayInNanoSeconds(double delayInNanoSec)
Set the delay, in nanoSeconds.
Definition: Delay.h:48
double nanoSecondsPerSecond() const
Get the delay, in nanoseconds/sec.
Definition: Delay.h:83
double nanoSeconds() const
Get the delay, in nanoseconds.
Definition: Delay.h:76
void setDelayRateInMeters(double delayRateInMeters)
Set the delay rate, in meters/second.
Definition: Delay.h:41
virtual ~Delay()
Destructor.
std::ostream & operator<<(std::ostream &os, const carma::services::Angle &angle)
Define the &lt;&lt; operator to allow, e.g.
Delay()
Constructor.