00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _Matrix_matrixTool_h_
00027 #define _Matrix_matrixTool_h_
00028
00029 #include "matrix_global.h"
00030
00031 namespace PLib {
00032
00033
00034
00035
00036 template <class T>
00037 inline int compareT(T*a, T* b){
00038 if(*(a) > *(b))
00039 return 1 ;
00040 if(*(a) < *(b))
00041 return -1 ;
00042 return 0 ;
00043 }
00044
00045
00046 inline int compareInt(const void* a, const void* b){
00047 return compareT((int*)a,(int*)b) ;
00048 }
00049
00050 inline int compareFloat(const void* a, const void* b){
00051 return compareT((float*)a,(float*)b) ;
00052 }
00053
00054 inline int compareDouble(const void* a, const void* b){
00055 return compareT((float*)a,(float*)b) ;
00056 }
00057
00058 template <class T>
00059 inline T absolute(T a){
00060 return ( a<T() ) ? -a : a ;
00061 }
00062
00063 inline double absolute(double a) { return fabs(a) ; }
00064 inline float absolute(float a) { return fabs(a) ; }
00065
00066 template <class T>
00067 inline T to2power(T a){
00068 return a*a ;
00069 }
00070
00071 template <class T>
00072 inline T minimum(T a, T b){
00073 return a<b ? a : b ;
00074 }
00075
00076 template <class T>
00077 inline T maximum(T a, T b){
00078 return a>b ? a : b ;
00079 }
00080
00081
00082
00083
00084 template <class T>
00085 inline T minimumRef(const T &a, const T &b){
00086 return a<b ? a : b ;
00087 }
00088
00089 template <class T>
00090 inline T maximumRef(const T &a, const T &b){
00091 return a>b ? a : b ;
00092 }
00093
00094
00095
00096
00097
00098
00099
00100 inline Complex minimum(Complex a, Complex b){
00101 double r,i ;
00102 r = minimum(real(a),real(b)) ;
00103 i = minimum(imag(a),imag(b)) ;
00104 return Complex(r,i) ;
00105 }
00106
00107 inline Complex maximum(Complex a, Complex b){
00108 double r,i ;
00109 r = maximum(real(a),real(b)) ;
00110 i = maximum(imag(a),imag(b)) ;
00111 return Complex(r,i) ;
00112 }
00113
00114
00115 inline Complex minimumByRef(const Complex &a, const Complex &b){
00116 double r,i ;
00117 r = minimum(real(a),real(b)) ;
00118 i = minimum(imag(a),imag(b)) ;
00119 return Complex(r,i) ;
00120 }
00121
00122
00123 inline Complex maximumByRef(const Complex &a, const Complex &b){
00124 double r,i ;
00125 r = maximum(real(a),real(b)) ;
00126 i = maximum(imag(a),imag(b)) ;
00127 return Complex(r,i) ;
00128 }
00129
00130
00148 template<class T> inline void boundTo(T& a, T low, T high){
00149 if(a<=low) a = low ;
00150 if(a>=high) a = high ;
00151 }
00152
00153 }
00154
00155 #endif