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 Flux_CLASS
00028 #define Flux_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::IDLFlux;
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 Flux;
00052 Flux operator * ( double , const Flux & );
00053 ostream & operator << ( ostream &, const Flux & );
00054 istream & operator >> ( istream &, Flux&);
00055
00065 class Flux {
00066 friend Flux operator * ( double , const Flux & );
00067 friend ostream & operator << ( ostream &, const Flux & );
00068 friend istream & operator >> ( istream &, Flux&);
00069
00070 public:
00071 static double fromString(const string&);
00072 static string toString(double);
00073
00077 void toBin(EndianOSStream& eoss);
00078
00084 static void toBin(const vector<Flux>& flux, EndianOSStream& eoss);
00085
00091 static void toBin(const vector<vector<Flux> >& flux, EndianOSStream& eoss);
00092
00098 static void toBin(const vector<vector<vector<Flux> > >& flux, EndianOSStream& eoss);
00099
00106 static Flux fromBin(EndianISStream& eiss);
00107
00114 static vector<Flux> from1DBin(EndianISStream & eiss);
00115
00122 static vector<vector<Flux> > from2DBin(EndianISStream & eiss);
00123
00130 static vector<vector<vector<Flux> > > from3DBin(EndianISStream & eiss);
00131
00132 static Flux getFlux(StringTokenizer &t) throw(NumberFormatException);
00133
00134 Flux();
00135 Flux(const Flux &);
00136 Flux(const string &s);
00137 #ifndef WITHOUT_ACS
00138 Flux(const IDLFlux &);
00139 #endif
00140 Flux(double value);
00141 virtual ~Flux();
00142
00143 Flux& operator = (const Flux&);
00144 Flux& operator = (const double);
00145
00146 Flux& operator += (const Flux&);
00147 Flux& operator -= (const Flux&);
00148 Flux& operator *= (const double);
00149 Flux& operator /= (const double);
00150
00151 Flux operator + (const Flux&) const;
00152 Flux operator - (const Flux&) const;
00153 Flux operator * (const double) const;
00154 Flux operator / (const double) const;
00155
00156 bool operator < (const Flux&) const;
00157 bool operator > (const Flux&) const;
00158 bool operator <= (const Flux&) const;
00159 bool operator >= (const Flux&) const;
00160 bool operator == (const Flux&) const;
00161 bool equals(const Flux&) const;
00162 bool operator != (const Flux&) const;
00163
00164 bool isZero() const;
00165
00166 Flux operator - () const;
00167 Flux operator + () const;
00168
00169 string toString() const;
00170 string toStringI() const;
00171
00172 operator string () const;
00173 double get() const;
00174 #ifndef WITHOUT_ACS
00175 IDLFlux toIDLFlux() const;
00176 #endif
00177
00178 static string unit();
00179
00180 private:
00181 double value;
00182
00183 };
00184
00185
00186 inline Flux::Flux() : value(0.0) {
00187 }
00188
00189 inline Flux::Flux(const Flux &t) : value(t.value) {
00190 }
00191
00192 #ifndef WITHOUT_ACS
00193 inline Flux::Flux(const IDLFlux &l) : value(l.value) {
00194 }
00195 #endif
00196
00197 inline Flux::Flux(const string &s) : value(fromString(s)) {
00198 }
00199
00200 inline Flux::Flux(double v) : value(v) {
00201 }
00202
00203
00204 inline Flux::~Flux() { }
00205
00206
00207 inline Flux& Flux::operator = ( const Flux &t ) {
00208 value = t.value;
00209 return *this;
00210 }
00211
00212
00213 inline Flux& Flux::operator = ( const double v ) {
00214 value = v;
00215 return *this;
00216 }
00217
00218
00219 inline Flux& Flux::operator += ( const Flux& t) {
00220 value += t.value;
00221 return *this;
00222 }
00223
00224 inline Flux& Flux::operator -= ( const Flux& t) {
00225 value -= t.value;
00226 return *this;
00227 }
00228
00229 inline Flux& Flux::operator *= ( const double n) {
00230 value *= n;
00231 return *this;
00232 }
00233
00234 inline Flux& Flux::operator /= ( const double n) {
00235 value /= n;
00236 return *this;
00237 }
00238
00239
00240 inline Flux Flux::operator + ( const Flux &t2 ) const {
00241 Flux tmp;
00242 tmp.value = value + t2.value;
00243 return tmp;
00244 }
00245
00246 inline Flux Flux::operator - ( const Flux &t2 ) const {
00247 Flux tmp;
00248 tmp.value = value - t2.value;
00249 return tmp;
00250 }
00251 inline Flux Flux::operator * ( const double n) const {
00252 Flux tmp;
00253 tmp.value = value * n;
00254 return tmp;
00255 }
00256
00257 inline Flux Flux::operator / ( const double n) const {
00258 Flux tmp;
00259 tmp.value = value / n;
00260 return tmp;
00261 }
00262
00263
00264 inline bool Flux::operator < (const Flux& x) const {
00265 return (value < x.value);
00266 }
00267
00268 inline bool Flux::operator > (const Flux& x) const {
00269 return (value > x.value);
00270 }
00271
00272 inline bool Flux::operator <= (const Flux& x) const {
00273 return (value <= x.value);
00274 }
00275
00276 inline bool Flux::operator >= (const Flux& x) const {
00277 return (value >= x.value);
00278 }
00279
00280 inline bool Flux::operator == (const Flux& x) const {
00281 return (value == x.value);
00282 }
00283 inline bool Flux::equals(const Flux& x) const {
00284 return (value == x.value);
00285 }
00286
00287 inline bool Flux::operator != (const Flux& x) const {
00288 return (value != x.value);
00289 }
00290
00291
00292 inline Flux Flux::operator - () const {
00293 Flux tmp;
00294 tmp.value = -value;
00295 return tmp;
00296 }
00297
00298 inline Flux Flux::operator + () const {
00299 Flux tmp;
00300 tmp.value = value;
00301 return tmp;
00302 }
00303
00304
00305 inline Flux::operator string () const {
00306 return toString();
00307 }
00308
00309 inline string Flux::toString() const {
00310 return toString(value);
00311 }
00312
00313 inline string Flux::toStringI() const {
00314 return toString(value);
00315 }
00316
00317 inline double Flux::get() const {
00318 return value;
00319 }
00320
00321 #ifndef WITHOUT_ACS
00322 inline IDLFlux Flux::toIDLFlux() const {
00323 IDLFlux tmp;
00324 tmp.value = value;
00325 return tmp;
00326 }
00327 #endif
00328
00329
00330
00331 inline Flux operator * ( double n, const Flux &x) {
00332 Flux tmp;
00333 tmp.value = x.value * n;
00334 return tmp;
00335 }
00336
00337 inline ostream & operator << ( ostream &o, const Flux &x ) {
00338 o << x.value;
00339 return o;
00340 }
00341
00342 inline istream & operator >> ( istream &i, Flux &x ) {
00343 i >> x.value;
00344 return i;
00345 }
00346
00347 inline string Flux::unit() {
00348 return string ("jy");
00349 }
00350
00351 }
00352
00353 #endif