00001
00023
00024
00025 #ifndef __ETL__MISC_H_
00026 #define __ETL__MISC_H_
00027
00028
00029 #include <cmath>
00030
00031 #include <math.h>
00032
00033
00034
00035
00036
00037
00038
00039 _ETL_BEGIN_NAMESPACE
00040
00041 template<typename I, typename T> inline I
00042 binary_find(I begin, I end, const T& value)
00043 {
00044 #if 1
00045 I iter(begin+(end-begin)/2);
00046
00047 while(end-begin>1 && !(*iter==value))
00048 {
00049 ((*iter<value)?begin:end) = iter;
00050
00051 iter = begin+(end-begin)/2;
00052 }
00053 return iter;
00054 #else
00055 size_t len_(end-begin);
00056 size_t half_(len_/2);
00057
00058 I iter(begin);
00059 iter+=half_;
00060
00061 while(len_>1 && !(*iter==value))
00062 {
00063 ((*iter<value)?begin:end) = iter;
00064
00065 len_=half_;
00066 half_/=2;
00067
00068 iter=begin;
00069 iter+=half_;
00070 }
00071 return iter;
00072 #endif
00073 }
00074
00075 inline int round_to_int(const float x) {
00079
00080
00081 if (x>=0) return static_cast<int>(x + 0.5);
00082 else return static_cast<int>(x - 0.5);
00083 }
00084 inline int round_to_int(const double x) {
00085
00086
00087 if (x>=0) return static_cast<int>(x + 0.5);
00088 else return static_cast<int>(x - 0.5);
00089 }
00090
00091 inline int ceil_to_int(const float x) { return static_cast<int>(ceil(x)); }
00092 inline int ceil_to_int(const double x) { return static_cast<int>(ceil(x)); }
00093
00094 inline int floor_to_int(const float x) { return static_cast<int>(x); }
00095 inline int floor_to_int(const double x) { return static_cast<int>(x); }
00096
00097 _ETL_END_NAMESPACE
00098
00099
00100
00101
00102
00103 #endif