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