Frequency.h

00001 /* 00002 * ALMA - Atacama Large Millimeter Array 00003 * (c) European Southern Observatory, 2002 00004 * (c) Associated Universities Inc., 2002 00005 * Copyright by ESO (in the framework of the ALMA collaboration), 00006 * Copyright by AUI (in the framework of the ALMA collaboration), 00007 * All rights reserved. 00008 * 00009 * This library is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free software Foundation; either 00012 * version 2.1 of the License, or (at your option) any later version. 00013 * 00014 * This library is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY, without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with this library; if not, write to the Free Software 00021 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 00022 * MA 02111-1307 USA 00023 * 00024 * File Frequency.h 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(); // default constructor 00131 Frequency(const Frequency &); // X const X& constructor 00132 Frequency(const string &s); 00133 #ifndef WITHOUT_ACS 00134 Frequency(const IDLFrequency &); 00135 #endif 00136 Frequency(double value); 00137 virtual ~Frequency(); // destructor 00138 00139 Frequency& operator = (const Frequency&); // assignment operator 00140 Frequency& operator = (const double); // assignment operator 00141 00142 Frequency& operator += (const Frequency&); // assignment with arithmetic 00143 Frequency& operator -= (const Frequency&); // operators 00144 Frequency& operator *= (const double); 00145 Frequency& operator /= (const double); 00146 00147 Frequency operator + (const Frequency&) const; // arithmetic operators 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; // comparison operators 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; // unary minus 00163 Frequency operator + () const; // unary plus 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 // Frequency constructors 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 // Frequency destructor 00199 inline Frequency::~Frequency() { } 00200 00201 // assignment operator 00202 inline Frequency& Frequency::operator = ( const Frequency &t ) { 00203 value = t.value; 00204 return *this; 00205 } 00206 00207 // assignment operator 00208 inline Frequency& Frequency::operator = ( const double v ) { 00209 value = v; 00210 return *this; 00211 } 00212 00213 // assignment with arithmetic operators 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 // arithmetic functions 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 // comparison operators 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 // unary - and + operators 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 // Conversion functions 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 // Friend functions 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 } // End namespace asdm 00347 00348 #endif /* Frequency_CLASS */

Generated on Tue Nov 18 17:43:41 2008 for ASDM C++ Implementation by doxygen 1.3.8