00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _SG_INLINES_H
00028 #define _SG_INLINES_H
00029
00030
00031 template <class T>
00032 inline int SG_SIGN(const T x) {
00033 return x < T(0) ? -1 : 1;
00034 }
00035
00036
00037 template <class T>
00038 inline T SG_MIN2(const T a, const T b) {
00039 return a < b ? a : b;
00040 }
00041
00042
00043 template <class T>
00044 inline T SG_MIN3( const T a, const T b, const T c) {
00045 return (a < b ? SG_MIN2 (a, c) : SG_MIN2 (b, c));
00046 }
00047
00048
00049 template <class T>
00050 inline T SG_MAX2(const T a, const T b) {
00051 return a > b ? a : b;
00052 }
00053
00054
00055 template <class T>
00056 inline T SG_MAX3 (const T a, const T b, const T c) {
00057 return (a > b ? SG_MAX2 (a, c) : SG_MAX2 (b, c));
00058 }
00059
00060
00061 template <class T>
00062 inline void SG_MIN_MAX3 ( T &min, T &max, const T a, const T b, const T c) {
00063 if( a > b ) {
00064 if( a > c ) {
00065 max = a;
00066 min = SG_MIN2 (b, c);
00067 } else {
00068 max = c;
00069 min = SG_MIN2 (a, b);
00070 }
00071 } else {
00072 if( b > c ) {
00073 max = b;
00074 min = SG_MIN2 (a, c);
00075 } else {
00076 max = c;
00077 min = SG_MIN2 (a, b);
00078 }
00079 }
00080 }
00081
00082
00083 template <class T>
00084 inline void SG_SWAP( T &a, T &b) {
00085 T c = a; a = b; b = c;
00086 }
00087
00088
00089 template <class T>
00090 inline void SG_CLAMP_RANGE(T &x, const T min, const T max ) {
00091 if ( x < min ) { x = min; }
00092 if ( x > max ) { x = max; }
00093 }
00094
00095
00096 template <class T>
00097 inline void SG_NORMALIZE_RANGE( T &val, const T min, const T max ) {
00098 T step = max - min;
00099 while( val >= max ) val -= step;
00100 while( val < min ) val += step;
00101 };
00102
00103 #endif // _SG_INLINES_H