00001 #ifndef Impala_Core_Array_Pattern_PatM12PixOp_h
00002 #define Impala_Core_Array_Pattern_PatM12PixOp_h
00003
00004 #include "Core/Array/Pattern/FuncMpo.h"
00005
00006 #ifdef PX_HORUS_USED
00007 #include "Core/Array/Pattern/PxArrayFunc.h"
00008 #include "Core/Array/Pattern/PxStateTrans.h"
00009 #endif
00010
00011 namespace Impala
00012 {
00013 namespace Core
00014 {
00015 namespace Array
00016 {
00017 namespace Pattern
00018 {
00019
00020
00021 template<class DstArrayT, class SrcArrayT, class MpoT>
00022 inline void
00023 PatM12PixOp(DstArrayT*& dst,
00024 SrcArrayT* s1, SrcArrayT* s2, SrcArrayT* s3,
00025 SrcArrayT* s4, SrcArrayT* s5, SrcArrayT* s6,
00026 SrcArrayT* s7, SrcArrayT* s8, SrcArrayT* s9,
00027 SrcArrayT* s10, SrcArrayT* s11, SrcArrayT* s12, MpoT& mpo)
00028 {
00029 if (dst == 0)
00030 dst = ArrayClone<DstArrayT>(s1);
00031
00032 #ifdef PX_HORUS_USED
00033 if (!PxRunParallel()) {
00034 #endif
00035 FuncM12po(dst, s1, s2, s3, s4, s5, s6,
00036 s7, s8, s9, s10, s11, s12, mpo);
00037
00038 #ifdef PX_HORUS_USED
00039 } else {
00040 PxArrayPreStateTrans(s1, PAR_PART, STRONG);
00041 PxArrayPreStateTrans(s2, PAR_PART, STRONG);
00042 PxArrayPreStateTrans(s3, PAR_PART, STRONG);
00043 PxArrayPreStateTrans(s4, PAR_PART, STRONG);
00044 PxArrayPreStateTrans(s5, PAR_PART, STRONG);
00045 PxArrayPreStateTrans(s6, PAR_PART, STRONG);
00046 PxArrayPreStateTrans(s7, PAR_PART, STRONG);
00047 PxArrayPreStateTrans(s8, PAR_PART, STRONG);
00048 PxArrayPreStateTrans(s9, PAR_PART, STRONG);
00049 PxArrayPreStateTrans(s10, PAR_PART, STRONG);
00050 PxArrayPreStateTrans(s11, PAR_PART, STRONG);
00051 PxArrayPreStateTrans(s12, PAR_PART, STRONG);
00052 PxArrayPreStateTrans(dst, PAR_PART, WEAK);
00053 FuncM12po(PxArrayPD(dst),
00054 PxArrayPD(s1), PxArrayPD(s2), PxArrayPD(s3),
00055 PxArrayPD(s4), PxArrayPD(s5), PxArrayPD(s6),
00056 PxArrayPD(s7), PxArrayPD(s8), PxArrayPD(s9),
00057 PxArrayPD(s10),PxArrayPD(s11),PxArrayPD(s12), mpo);
00058 PxArrayPostStateTrans(dst);
00059
00060 if (!PxRunLazyParallel()) {
00061 PxArrayForceNonDistributed(s1);
00062 PxArrayForceNonDistributed(s2);
00063 PxArrayForceNonDistributed(s3);
00064 PxArrayForceNonDistributed(s4);
00065 PxArrayForceNonDistributed(s5);
00066 PxArrayForceNonDistributed(s6);
00067 PxArrayForceNonDistributed(s7);
00068 PxArrayForceNonDistributed(s8);
00069 PxArrayForceNonDistributed(s9);
00070 PxArrayForceNonDistributed(s10);
00071 PxArrayForceNonDistributed(s11);
00072 PxArrayForceNonDistributed(s12);
00073 PxArrayForceNonDistributed(dst);
00074 }
00075 }
00076 #endif
00077 }
00078
00079 }
00080 }
00081 }
00082 }
00083
00084 #endif