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 Thu Nov 29 16:46:46 2007 for ASDM C++ Implementation by  doxygen 1.5.1