00001 #ifndef __VMML__HELPER_FUNCTIONS__H__
00002 #define __VMML__HELPER_FUNCTIONS__H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 namespace vmml
00028 {
00029
00030
00031 template< class T >
00032 inline T min( const T a, const T b )
00033 {
00034 return ( a < b ) ? a : b;
00035 }
00036
00037
00038
00039 template< class T >
00040 inline T max( const T a, const T b )
00041 {
00042 return ( a > b ) ? a : b;
00043 }
00044
00045
00046
00047 template< class T >
00048 inline T squared( const T a )
00049 {
00050 return ( a == 0.0 ) ? 0.0 : a * a;
00051 }
00052
00053
00054
00055
00056
00057
00058 template< class T >
00059 inline T pythag( T a, T b )
00060 {
00061 a = fabs(a);
00062 b = fabs(b);
00063 if ( a > b )
00064 return a * sqrt( 1.0 + squared( b / a ) );
00065 else
00066 return ( b == 0.0 ) ? 0.0 : b * sqrt( 1.0 + squared( a / b ) );
00067 }
00068
00069
00070
00071 template< class T >
00072 inline T sign( T a, T b )
00073 {
00074 return ( b >= 0.0 ) ? fabs( a ) : -fabs( a );
00075 }
00076
00077
00078 }
00079
00080 #endif
00081