36 #define _USE_MATH_DEFINES 
   76     return 0 <= v  &&  v < max;
 
   80 bool InRange( 
double v, 
double min, 
double max )
 
   82     return min <= v  &&  v <= max;
 
   86 bool InRange( 
int n, 
double const* v, 
double const* min, 
double const* max )
 
   88     for ( 
int i=0; i < n; i++ )
 
   90         if (! 
InRange( v[i], min[i], max[i] ))
 
   97 double ToRange( 
double v, 
double min, 
double max )
 
   99     if (v < min) 
return min;
 
  100     if (v > max) 
return max;
 
  105 void ToRange( 
int n, 
double* v, 
double const* min, 
double const* max )
 
  107     for ( 
int i=0; i < n; i++ )
 
  109         v[i] = 
ToRange( v[i], min[i], max[i] );
 
  114 void ToRange( std::vector<double>& v, std::vector<double> 
const& min, std::vector<double> 
const& max )
 
  116     ToRange( 
int(v.size()), &(v[0]), &(min[0]), &(max[0]) );
 
  126 double Approx( 
double a, 
double b, 
double eps )
 
  128     return fabs( a - b ) < eps;
 
  132 bool Approx( 
int n, 
double* a, 
double* b, 
double* eps )
 
  134     for ( 
int i=0; i < n; i++ )
 
  136         if (! 
Approx( a[i], b[i], eps[i] ))
 
  158     ::Sleep( 
static_cast<int>(1000.0*t) );
 
  161     sleeptime.tv_sec  = (time_t) floor( t );
 
  162     sleeptime.tv_nsec = (long)   ((t - floor( t )) * 1E9);
 
  166     nanosleep( &sleeptime, 
NULL );
 
  179     std::vector<int> result;
 
  180     char const* rev_orig = rev;
 
  182     while ( rev != 
NULL && *rev != 
'\0' )
 
  185         int chars_scanned = 0;
 
  187         rc = sscanf( rev, 
"%d%n", &r, &chars_scanned );
 
  191         if ( chars_scanned > 0 )
 
  195             rev += chars_scanned;
 
  197         else if ( chars_scanned == 0  &&  
'a' <= *rev && *rev <= 
'z' )
 
  199             result.push_back( *rev - 
'a' + 1 );
 
  202         else if ( chars_scanned == 0  &&  
'A' <= *rev && *rev <= 
'Z' )
 
  204             result.push_back( *rev - 
'A' + 1 );
 
  207         else if ( chars_scanned == 0  &&  ( *rev == 
'.' || *rev == 
'-' ) )
 
  213             std::cerr << 
"NumerifyRelease( " << rev_orig << 
" ) Could not be handled!\n";
 
  215             assert( 
"invalid rev string!" == 
NULL );
 
  238     assert( rev1 != 
NULL );
 
  239     assert( rev2 != 
NULL );
 
  244     std::vector<int>::const_iterator n1 = nums1.begin();
 
  245     std::vector<int>::const_iterator n2 = nums2.begin();
 
  247     for ( ; n1 != nums1.end() && n2 != nums2.end();  n1++, n2++ )
 
  251         else if ( *n1 > *n2 )
 
  256     if ( nums1.size() < nums2.size() )
 
  258     if ( nums1.size() > nums2.size() )