00001
00028
00029
00030 #ifndef UTIL_H_
00031 #define UTIL_H_
00032
00033
00034
00035
00036
00037
00038 #include <math.h>
00039 #include <vector>
00040 #include <algorithm>
00041 #include <iostream>
00042
00043
00044
00045
00046
00047 #include "sdhlibrary_settings.h"
00048 #include "simplevector.h"
00049
00050
00051
00052
00053
00054 NAMESPACE_SDH_START
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00079
00080
00103 #define DEFINE_TO_CASECOMMAND( _c ) case _c: return (#_c)
00104
00127 #define DEFINE_TO_CASECOMMAND_MSG( _c, ... ) case _c: return (#_c ": " __VA_ARGS__)
00128
00132 bool InIndex( int v, int max );
00133
00134
00138 bool InRange( double v, double min, double max );
00139
00140
00146 bool InRange( int n, double const* v, double const* min, double const* max );
00147
00148
00154 double ToRange( double v, double min, double max );
00155
00156
00162 void ToRange( int n, double* v, double const* min, double const* max );
00163
00164
00170 void ToRange( std::vector<double>& v, std::vector<double> const& min, std::vector<double> const& max );
00171
00172
00178 void ToRange( cSimpleVector& v, std::vector<double> const& min, std::vector<double> const& max );
00179
00180
00184 double Approx( double a, double b, double eps );
00185
00186
00191 bool Approx( int n, double* a, double* b, double* eps );
00192
00193
00197 double DegToRad( double d );
00198
00199
00203 double RadToDeg( double r );
00204
00205
00209 void SleepSec( double t );
00210
00211
00220 template<typename Function, typename Tp>
00221 void apply( Function f, Tp& sequence )
00222 {
00223
00224
00225 for ( typename Tp::iterator it = sequence.begin();
00226 it < sequence.end();
00227 it++ )
00228 {
00229 *it = f( *it );
00230 }
00231 }
00232
00233
00234
00247 template<typename Function, typename InputIterator>
00248 Function
00249 apply( Function f, InputIterator first, InputIterator last)
00250 {
00251
00252
00253
00254 for ( ; first != last; ++first)
00255 *first = f(*first);
00256 }
00257
00258
00266 template<typename Function, typename Tp>
00267 Tp map(Function f, Tp sequence)
00268 {
00269 Tp result (sequence);
00270
00271 apply( f, result );
00272
00273 return result;
00274 }
00275
00276
00310 template<typename T>
00311 std::ostream& operator<<(std::ostream& stream, std::vector<T> const& v)
00312 {
00313 char const* sep = "";
00314
00315 typename std::vector<T>::const_iterator it;
00316 for ( it = v.begin();
00317 it != v.end();
00318 it++ )
00319 {
00320 stream << sep << *it ;
00321 sep = ", ";
00322 }
00323
00324 return stream;
00325 }
00326
00327
00329 int CompareReleases( char const* rev1, char const* rev2 );
00330
00332
00333 NAMESPACE_SDH_END
00334
00335 #endif
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348