00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CNTM_MATHUTILS_H
00015 #define CNTM_MATHUTILS_H
00016
00017 namespace Cntm
00018 {
00019
00020
00021
00022
00023
00024 template < typename Type >
00025 inline const Type & Min(const Type & value1, const Type & value2)
00026 {
00027 return (value1 < value2) ? value1 : value2;
00028 }
00029
00030
00031
00032
00033
00034 template < typename Type >
00035 inline const Type & Max(const Type & value1, const Type & value2)
00036 {
00037 return (value1 > value2) ? value1 : value2;
00038 }
00039
00040
00041
00042
00043
00044 template < typename Type >
00045 inline Type DivIntGreatRound(Type value1, Type value2)
00046 {
00047 return (value1 + value2 - 1) / value2;
00048 }
00049
00050
00051
00052
00053
00054 template < typename Type >
00055 inline void Exchange(Type & value1, Type & value2)
00056 {
00057 Type temp = value1;
00058 value1 = value2;
00059 value2 = temp;
00060 }
00061
00062
00063
00064
00065
00066
00067 template < typename Type >
00068 inline bool InRange(const Type & value, const Type & low, const Type & high)
00069 {
00070 return !OutRange(value, low, high);
00071 }
00072
00073
00074
00075
00076
00077 template < typename Type >
00078 inline bool OutRange(const Type & value, const Type & low, const Type & high)
00079 {
00080 return ((low > value) || (value > high));
00081 }
00082
00083
00084
00085
00086
00087 template < typename Type >
00088 inline const Type & TrimRange(const Type & value, const Type & low, const Type & high)
00089 {
00090 return Max(low, Min(value, high));
00091 }
00092
00093
00094
00095
00096
00097 template < typename Type >
00098 inline int RangeIndex(const Type & value, const Type & bound)
00099 {
00100 if (value < bound) return -1;
00101 else if (value > bound) return 1;
00102 else return 0;
00103 }
00104
00105
00106
00107
00108
00109 template < typename Type >
00110 inline int RangeIndex(const Type & value, const Type & low, const Type & high)
00111 {
00112 if (value < low) return -1;
00113 else if (value > high) return 1;
00114 else return 0;
00115 }
00116
00117
00118
00119
00120
00121
00122 template < typename Type >
00123 inline bool InInterval(const Type & value, const Type & low, const Type & high)
00124 {
00125 return !OutInterval(value, low, high);
00126 }
00127
00128
00129
00130
00131
00132 template < typename Type >
00133 inline bool OutInterval(const Type & value, const Type & low, const Type & high)
00134 {
00135 return ((low > value) || !(value < high));
00136 }
00137
00138
00139
00140
00141
00142 template < typename Type >
00143 inline int IntervalIndex(const Type & value, const Type & low, const Type & high)
00144 {
00145 if (value < low) return -1;
00146 else if (value < high) return 0;
00147 else return 1;
00148 }
00149
00150 }
00151
00152 #endif //CNTM_MATHUTILS_H