00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef Frequency_CLASS
00028 #define Frequency_CLASS
00029
00030 #include <vector>
00031 #include <iostream>
00032 #include <string>
00033 using namespace std;
00034
00035 #ifndef WITHOUT_ACS
00036 #include <asdmIDLTypesC.h>
00037 using asdmIDLTypes::IDLFrequency;
00038 #endif
00039
00040 #include <StringTokenizer.h>
00041 #include <NumberFormatException.h>
00042 using asdm::StringTokenizer;
00043 using asdm::NumberFormatException;
00044
00045 #include "EndianStream.h"
00046 using asdm::EndianOSStream;
00047 using asdm::EndianISStream;
00048
00049 namespace asdm {
00050
00051 class Frequency;
00052 Frequency operator * ( double , const Frequency & );
00053 ostream & operator << ( ostream &, const Frequency & );
00054 istream & operator >> ( istream &, Frequency&);
00055
00062 class Frequency {
00063 friend Frequency operator * ( double , const Frequency & );
00064 friend ostream & operator << ( ostream &, const Frequency & );
00065 friend istream & operator >> ( istream &, Frequency&);
00066
00067 public:
00068 static double fromString(const string&);
00069 static string toString(double);
00070 static Frequency getFrequency(StringTokenizer &t) throw(NumberFormatException);
00071
00075 void toBin(EndianOSStream& eoss);
00076
00082 static void toBin(const vector<Frequency>& frequency, EndianOSStream& eoss);
00083
00089 static void toBin(const vector<vector<Frequency> >& frequency, EndianOSStream& eoss);
00090
00096 static void toBin(const vector<vector<vector<Frequency> > >& frequency, EndianOSStream& eoss);
00097
00104 static Frequency fromBin(EndianISStream& eiss);
00105
00112 static vector<Frequency> from1DBin(EndianISStream & eiss);
00113
00120 static vector<vector<Frequency> > from2DBin(EndianISStream & eiss);
00121
00128 static vector<vector<vector<Frequency> > > from3DBin(EndianISStream & eiss);
00129
00130 Frequency();
00131 Frequency(const Frequency &);
00132 Frequency(const string &s);
00133 #ifndef WITHOUT_ACS
00134 Frequency(const IDLFrequency &);
00135 #endif
00136 Frequency(double value);
00137 virtual ~Frequency();
00138
00139 Frequency& operator = (const Frequency&);
00140 Frequency& operator = (const double);
00141
00142 Frequency& operator += (const Frequency&);
00143 Frequency& operator -= (const Frequency&);
00144 Frequency& operator *= (const double);
00145 Frequency& operator /= (const double);
00146
00147 Frequency operator + (const Frequency&) const;
00148 Frequency operator - (const Frequency&) const;
00149 Frequency operator * (const double) const;
00150 Frequency operator / (const double) const;
00151
00152 bool operator < (const Frequency&) const;
00153 bool operator > (const Frequency&) const;
00154 bool operator <= (const Frequency&) const;
00155 bool operator >= (const Frequency&) const;
00156 bool operator == (const Frequency&) const;
00157 bool equals(const Frequency&) const;
00158 bool operator != (const Frequency&) const;
00159
00160 bool isZero() const;
00161
00162 Frequency operator - () const;
00163 Frequency operator + () const;
00164
00165 string toString() const;
00166 string toStringI() const;
00167
00168 operator string () const;
00169 double get() const;
00170 #ifndef WITHOUT_ACS
00171 IDLFrequency toIDLFrequency() const;
00172 #endif
00173 static string unit();
00174
00175 private:
00176 double value;
00177
00178 };
00179
00180
00181 inline Frequency::Frequency() : value(0.0) {
00182 }
00183
00184 inline Frequency::Frequency(const Frequency &t) : value(t.value) {
00185 }
00186
00187 #ifndef WITHOUT_ACS
00188 inline Frequency::Frequency(const IDLFrequency &l) : value(l.value) {
00189 }
00190 #endif
00191
00192 inline Frequency::Frequency(const string &s) : value(fromString(s)) {
00193 }
00194
00195 inline Frequency::Frequency(double v) : value(v) {
00196 }
00197
00198
00199 inline Frequency::~Frequency() { }
00200
00201
00202 inline Frequency& Frequency::operator = ( const Frequency &t ) {
00203 value = t.value;
00204 return *this;
00205 }
00206
00207
00208 inline Frequency& Frequency::operator = ( const double v ) {
00209 value = v;
00210 return *this;
00211 }
00212
00213
00214 inline Frequency& Frequency::operator += ( const Frequency& t) {
00215 value += t.value;
00216 return *this;
00217 }
00218
00219 inline Frequency& Frequency::operator -= ( const Frequency& t) {
00220 value -= t.value;
00221 return *this;
00222 }
00223
00224 inline Frequency& Frequency::operator *= ( const double n) {
00225 value *= n;
00226 return *this;
00227 }
00228
00229 inline Frequency& Frequency::operator /= ( const double n) {
00230 value /= n;
00231 return *this;
00232 }
00233
00234
00235 inline Frequency Frequency::operator + ( const Frequency &t2 ) const {
00236 Frequency tmp;
00237 tmp.value = value + t2.value;
00238 return tmp;
00239 }
00240
00241 inline Frequency Frequency::operator - ( const Frequency &t2 ) const {
00242 Frequency tmp;
00243 tmp.value = value - t2.value;
00244 return tmp;
00245 }
00246 inline Frequency Frequency::operator * ( const double n) const {
00247 Frequency tmp;
00248 tmp.value = value * n;
00249 return tmp;
00250 }
00251
00252 inline Frequency Frequency::operator / ( const double n) const {
00253 Frequency tmp;
00254 tmp.value = value / n;
00255 return tmp;
00256 }
00257
00258
00259 inline bool Frequency::operator < (const Frequency& x) const {
00260 return (value < x.value);
00261 }
00262
00263 inline bool Frequency::operator > (const Frequency& x) const {
00264 return (value > x.value);
00265 }
00266
00267 inline bool Frequency::operator <= (const Frequency& x) const {
00268 return (value <= x.value);
00269 }
00270
00271 inline bool Frequency::operator >= (const Frequency& x) const {
00272 return (value >= x.value);
00273 }
00274
00275 inline bool Frequency::operator == (const Frequency& x) const {
00276 return (value == x.value);
00277 }
00278 inline bool Frequency::equals(const Frequency& x) const {
00279 return (value == x.value);
00280 }
00281
00282 inline bool Frequency::operator != (const Frequency& x) const {
00283 return (value != x.value);
00284 }
00285
00286
00287 inline Frequency Frequency::operator - () const {
00288 Frequency tmp;
00289 tmp.value = -value;
00290 return tmp;
00291 }
00292
00293 inline Frequency Frequency::operator + () const {
00294 Frequency tmp;
00295 tmp.value = value;
00296 return tmp;
00297 }
00298
00299
00300 inline Frequency::operator string () const {
00301 return toString();
00302 }
00303
00304 inline string Frequency::toString() const {
00305 return toString(value);
00306 }
00307
00308 inline string Frequency::toStringI() const {
00309 return toString(value);
00310 }
00311
00312 inline double Frequency::get() const {
00313 return value;
00314 }
00315
00316 #ifndef WITHOUT_ACS
00317 inline IDLFrequency Frequency::toIDLFrequency() const {
00318 IDLFrequency tmp;
00319 tmp.value = value;
00320 return tmp;
00321 }
00322 #endif
00323
00324
00325
00326 inline Frequency operator * ( double n, const Frequency &x) {
00327 Frequency tmp;
00328 tmp.value = x.value * n;
00329 return tmp;
00330 }
00331
00332 inline ostream & operator << ( ostream &o, const Frequency &x ) {
00333 o << x.value;
00334 return o;
00335 }
00336
00337 inline istream & operator >> ( istream &i, Frequency &x ) {
00338 i >> x.value;
00339 return i;
00340 }
00341
00342 inline string Frequency::unit() {
00343 return string ("hz");
00344 }
00345
00346 }
00347
00348 #endif