00001 #ifndef Impala_Core_Array_Trait_M3poNorm2Sqr_h 00002 #define Impala_Core_Array_Trait_M3poNorm2Sqr_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 M3poNorm2Sqr 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 M3poNorm2Sqr() 00033 { 00034 } 00035 00037 DstArithT 00038 DoIt(const SrcArithT& x, const SrcArithT& y, const SrcArithT& z) 00039 { 00040 return x*x + y*y + z*z; 00041 } 00042 00043 }; 00044 00045 } // namespace Trait 00046 } // namespace Array 00047 } // namespace Core 00048 } // namespace Impala 00049 00050 #endif