00001 #ifndef Impala_Core_Array_Trait_M3poHarris_h 00002 #define Impala_Core_Array_Trait_M3poHarris_h 00003 00004 #include "Core/Array/Pattern/Categories.h" 00005 00006 namespace Impala 00007 { 00008 namespace Core 00009 { 00010 namespace Array 00011 { 00012 namespace Trait 00013 { 00014 00015 00018 template<class DstArrayT, class SrcArrayT> 00019 class M3poHarris 00020 { 00021 public: 00023 typedef Pattern::TagTransInVar TransVarianceCategory; 00024 00026 typedef Pattern::TagCallValue CallCategory; 00027 00028 typedef typename DstArrayT::ArithType DstArithT; 00029 typedef typename SrcArrayT::ArithType SrcArithT; 00030 00032 M3poHarris(SrcArithT k) 00033 { 00034 mK = k; 00035 } 00036 00038 DstArithT 00039 DoIt(const SrcArithT& Lx2, const SrcArithT& Ly2, const SrcArithT& LxLy) 00040 { 00041 return Lx2*Ly2 - LxLy*LxLy - mK*(Lx2+Ly2)*(Lx2+Ly2); 00042 } 00043 00044 private: 00045 00046 SrcArithT mK; 00047 }; 00048 00049 } // namespace Trait 00050 } // namespace Array 00051 } // namespace Core 00052 } // namespace Impala 00053 00054 #endif