1 #ifndef SZA_UTIL_LENGTH_H
2 #define SZA_UTIL_LENGTH_H
11 #include "carma/szautil/ConformableQuantity.h"
12 #include "carma/szautil/Matrix.h"
13 #include "carma/szautil/Time.h"
21 class Length :
public ConformableQuantity {
31 static const unsigned cmPerM_ = 100;
32 static const unsigned cmPerKm_ = 100000;
33 static const unsigned micronsPerCm_ = 10000;
39 Length(
const Centimeters& units,
double cm);
40 Length(
const Meters& units,
double m);
41 Length(
const Kilometers& units,
double km);
46 Length(
const Length& length);
56 void setCentimeters(
double cm);
58 void setMeters(
double m)
60 setCentimeters(m * cmPerM_);
63 void setKilometers(
double km)
65 setCentimeters(km * cmPerKm_);
71 inline double centimeters()
const {
75 inline double meters()
const {
79 inline double kilometers()
const {
80 return cm_ / cmPerKm_;
83 inline double microns()
const {
84 return cm_ * micronsPerCm_;
94 void operator=(Length& length) {
98 void operator=(
const Length& length) {
105 Length operator+(Length& length);
106 Length operator+(
const Length& length);
111 Length operator-(Length& length);
112 Length operator-(
const Length& length);
117 Length operator*(
double multFac);
118 void operator*=(
double multFac);
123 double operator/(
const Length& length);
124 double operator/(Length& length);
126 Length operator/(
double fac);
127 void operator/=(
double fac);
129 void operator+=(
const Length& length);
130 void operator+=(Length& length);
132 void operator-=(
const Length& length);
133 void operator-=(Length& length);
135 bool operator==(
const Length& length);
136 bool operator==(Length& length);
141 friend std::ostream& operator<<(std::ostream& os, Length& length);
142 friend std::ostream& operator<<(std::ostream& os,
const Length& length);
154 Vector<Length> operator*(Matrix<double>& mat, Vector<Length>& vec);
156 void operator/=(Vector<Length>& vec,
double fac);
158 Vector<Length> operator*(Vector<double>& vec, Length& fac);
165 #endif // End #ifndef SZA_UTIL_LENGTH_H