CARMA C++
Delay.h
1 #ifndef SZA_UTIL_DELAY_H
2 #define SZA_UTIL_DELAY_H
3 
11 #include <iostream>
12 
13 #include "carma/szautil/Length.h"
14 
15 namespace sza {
16  namespace util {
17 
21  class Delay {
22  public:
23 
27  Delay();
28 
32  virtual ~Delay();
33 
37  void setDelay(Length length) {
38  setDelayInMeters(length.meters());
39  }
40 
44  void setDelayInMeters(double delayInMeters) {
45  nanoSeconds_ = delayInMeters / lightSpeed_ * nanoSecPerSec_;
46  }
47 
51  void setDelayRateInMeters(double delayRateInMeters) {
52  dNanoSeconds_ = delayRateInMeters / lightSpeed_ * nanoSecPerSec_;
53  }
54 
58  void setDelayInNanoSeconds(double delayInNanoSec) {
59  nanoSeconds_ = delayInNanoSec;
60  }
61 
65  void setDelayRateInNanoSeconds(double delayRateInNanoSec) {
66  dNanoSeconds_ = delayRateInNanoSec;
67  }
68 
72  inline double meters() {
73  return nanoSeconds_ / nanoSecPerSec_ * lightSpeed_;
74  }
75 
79  inline double metersPerSecond() {
80  return dNanoSeconds_ / nanoSecPerSec_ * lightSpeed_;
81  }
82 
86  inline double seconds() {
87  return nanoSeconds_ / nanoSecPerSec_;
88  }
89 
93  inline double nanoSeconds() {
94  return nanoSeconds_;
95  }
96 
100  inline double nanoSecondsPerSecond() {
101  return dNanoSeconds_;
102  }
103 
107  inline double secondsPerSecond() {
108  return dNanoSeconds_ / nanoSecPerSec_;
109  }
110 
114  Delay operator+(Delay& delay);
115  Delay& operator+=(Delay& delay);
116  Delay& operator+=(Delay delay);
117 
121  Delay operator-(Delay& delay);
122  Delay& operator-=(Delay& delay);
123  Delay& operator-=(Delay delay);
124 
129  friend std::ostream& operator<<(std::ostream& os, Delay delay);
130 
131  inline void flipDelay() {
132  nanoSeconds_ *= -1;
133  }
134 
135  inline void flipRate() {
136  dNanoSeconds_ *= -1;
137  }
138 
139  private:
140 
144  static const double lightSpeed_;
145  static const double nanoSecPerSec_;
146 
147  double nanoSeconds_;
148  double dNanoSeconds_;
149 
150  }; // End class Delay
151 
152  std::ostream& operator<<(std::ostream& os, Delay delay);
153 
154  } // End namespace util
155 } // End namespace sza
156 
157 
158 
159 #endif // End #ifndef SZA_UTIL_DELAY_H
double nanoSecondsPerSecond()
Get the delay rate, in nanoseconds/sec.
Definition: Delay.h:100
Trivial class for handling delays.
Definition: Delay.h:21
void setDelayRateInNanoSeconds(double delayRateInNanoSec)
Set the delay rate, in nanoSeconds/second.
Definition: Delay.h:65
Delay operator+(Delay &delay)
Add two Delays.
void setDelayRateInMeters(double delayRateInMeters)
Set the delay rate, in meters/second.
Definition: Delay.h:51
virtual ~Delay()
Destructor.
double nanoSeconds()
Get the delay, in nanoseconds.
Definition: Delay.h:93
double meters()
Get the delay, in meters.
Definition: Delay.h:72
void setDelay(Length length)
Set the delay.
Definition: Delay.h:37
double secondsPerSecond()
Get the delay rate, in seconds/sec.
Definition: Delay.h:107
void setDelayInMeters(double delayInMeters)
Set the delay, in meters.
Definition: Delay.h:44
Delay operator-(Delay &delay)
Subtract two Delays.
double seconds()
Get the delay, in seconds.
Definition: Delay.h:86
friend std::ostream & operator<<(std::ostream &os, Delay delay)
Allows cout &lt;&lt; Delay.
double metersPerSecond()
Get the delay rate, in meters/sec.
Definition: Delay.h:79
void setDelayInNanoSeconds(double delayInNanoSec)
Set the delay, in nanoSeconds.
Definition: Delay.h:58
Delay()
Constructor.