00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef HxExportExtraIdentMaskSum_h
00011 #define HxExportExtraIdentMaskSum_h
00012
00013 #include "HxClassName.h"
00014 #include "HxSizes.h"
00015 #include "HxCategories.h"
00016 #include "HxTagList.h"
00017
00018
00022 template<class ResultT, class ImValT, class ExtraValT>
00023 class HxExportExtraIdentMaskSum
00024 {
00025 public:
00027 typedef HxTagTransInVar TransVarianceCategory;
00028
00030 typedef HxTag1Phase PhaseCategory;
00031
00032
00034 HxExportExtraIdentMaskSum(HxTagList& tags);
00035
00037 ~HxExportExtraIdentMaskSum();
00038
00040 void doIt(const ImValT& imV, const ExtraValT& extraV);
00041
00043 static HxString className();
00044
00045 private:
00046 HxTagList& _tags;
00047 ExtraValT _maskVal;
00048 ResultT _result;
00049 };
00050
00051 template<class ResultT, class ImValT, class ExtraValT>
00052
00053 HxExportExtraIdentMaskSum<ResultT,ImValT,ExtraValT>::HxExportExtraIdentMaskSum(HxTagList& tags) : _tags(tags)
00054 {
00055 _maskVal = HxGetTag<int>(tags, "maskVal");
00056 _result = HxScalarInt(0);
00057 }
00058
00059 template<class ResultT, class ImValT, class ExtraValT>
00060 HxExportExtraIdentMaskSum<ResultT,ImValT,ExtraValT>::~HxExportExtraIdentMaskSum()
00061 {
00062 HxAddTag(_tags, "result", HxValue(_result));
00063 }
00064
00065 template<class ResultT, class ImValT, class ExtraValT>
00066 inline void
00067 HxExportExtraIdentMaskSum<ResultT,ImValT,ExtraValT>::doIt(const ImValT& imV,
00068 const ExtraValT& extraV)
00069 {
00070 if (extraV == _maskVal) {
00071 _result += imV;
00072 }
00073 }
00074
00075 template<class ResultT, class ImValT, class ExtraValT>
00076 inline HxString
00077 HxExportExtraIdentMaskSum<ResultT,ImValT,ExtraValT>::className()
00078 {
00079 return HxString("identMaskSum");
00080 }
00081
00082
00083 #endif