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