00001 #ifndef Impala_Core_Tracking_TraitBpoAddAssignPtr_h 00002 #define Impala_Core_Tracking_TraitBpoAddAssignPtr_h 00003 00004 #include "Core/Array/Element/E0SmallVal2.h" 00005 #include "Core/Array/Pattern/Categories.h" 00006 00019 namespace Impala 00020 { 00021 namespace Core 00022 { 00023 namespace Tracking 00024 { 00025 00028 class TraitBpoAddAssignPtr 00029 { 00030 public: 00031 typedef Impala::Core::Array::Pattern::TagTransInVar TransVarianceCategory; 00032 typedef Impala::Core::Array::Pattern::TagCallPointer CallCategory; 00033 00034 TraitBpoAddAssignPtr() 00035 { 00036 } 00037 00039 void DoIt(double* x, double* y) 00040 { 00041 for(int i=0 ; i<1 ; i++) 00042 x[i] += y[i]; 00043 } 00044 00045 static void NeutralElement(double* x) 00046 { 00047 for(int i=0 ; i<1 ; i++) 00048 x[i] += 0; 00049 } 00050 }; 00051 00054 class TraitBpoDist 00055 { 00056 public: 00057 typedef Impala::Core::Array::Pattern::TagTransInVar TransVarianceCategory; 00058 typedef Impala::Core::Array::Pattern::TagCallPointer CallCategory; 00059 00060 00061 TraitBpoDist() {} 00062 00063 void 00064 DoIt(double* res, double* p1, double* p2) 00065 { 00066 int i; 00067 double t; 00068 *res=0; 00069 for(i=0 ; i<3 ; i++) 00070 { 00071 t = p1[i] - p2[i]; 00072 *res += t*t; 00073 } 00074 } 00075 }; 00076 00079 class TraitBpoInproduct 00080 { 00081 public: 00082 typedef Impala::Core::Array::Pattern::TagTransInVar TransVarianceCategory; 00083 typedef Impala::Core::Array::Pattern::TagCallPointer CallCategory; 00084 00085 00086 TraitBpoInproduct() {} 00087 00088 void 00089 DoIt(double* res, double* p1, double* p2) 00090 { 00091 int i; 00092 *res=0; 00093 for(i=0 ; i<3 ; i++) 00094 { 00095 *res += p1[i] * p2[i]; 00096 } 00097 } 00098 }; 00099 00100 } // namespace Tracking 00101 } // namespace Core 00102 } // namespace Impala 00103 00104 #endif //Impala_Core_Tracking_TraitBpoAddAssignPtr_h