Go to the documentation of this file.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 VCC_EXPORT bool InIndex( int v, int max );
00133 
00134 
00138 VCC_EXPORT bool InRange( double v, double min, double max );
00139 
00140 
00146 VCC_EXPORT bool InRange( int n, double const* v, double const* min, double const* max );
00147 
00148 
00154 VCC_EXPORT double ToRange( double v, double min, double max );
00155 
00156 
00162 VCC_EXPORT void ToRange( int n, double* v, double const* min, double const* max );
00163 
00164 
00170 VCC_EXPORT void ToRange( std::vector<double>& v, std::vector<double> const& min, std::vector<double> const& max );
00171 
00172 
00178 VCC_EXPORT void ToRange( cSimpleVector& v, std::vector<double> const& min, std::vector<double> const& max );
00179 
00180 
00184 VCC_EXPORT double Approx( double a, double b, double eps );
00185 
00186 
00191 VCC_EXPORT bool Approx( int n, double* a, double* b, double* eps );
00192 
00193 
00197 VCC_EXPORT double DegToRad( double d );
00198 
00199 
00203 VCC_EXPORT double RadToDeg( double r );
00204 
00205 
00209 VCC_EXPORT 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 VCC_EXPORT int CompareReleases( char const* rev1, char const* rev2 );
00330 
00331 
00333 template<typename T>
00334 class VCC_EXPORT cSetValueTemporarily
00335 {
00336     T* value_ptr;
00337     T  old_value;
00338 public:
00340     cSetValueTemporarily( T* _value_ptr, T new_value )
00341     : value_ptr( _value_ptr ),
00342       old_value( *value_ptr )
00343     {
00344         *value_ptr = new_value;
00345     }
00346 
00348     ~cSetValueTemporarily()
00349     {
00350         *value_ptr = old_value;
00351     }
00352 };
00353 
00355 
00356 NAMESPACE_SDH_END
00357 
00358 #endif
00359 
00360 
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368 
00369 
00370 
00371