00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef HxNgbMean_h
00010 #define HxNgbMean_h
00011
00012 #include "HxClassName.h"
00013 #include "HxSizes.h"
00014 #include "HxCategories.h"
00015 #include "HxTagList.h"
00016
00017
00018 template<class ResultT, class ArithT>
00019 class HxNgbMean
00020 {
00021 public:
00022
00023 typedef HxTagLoop IteratorCategory;
00024 typedef HxTag1Phase PhaseCategory;
00025
00026
00027 HxNgbMean(HxTagList& tags);
00028
00029 HxSizes size();
00030 void init(int, int, ArithT);
00031
00032 void next(int, int, ArithT value);
00033 void next(int, int, int, ArithT value);
00034 ArithT result() const;
00035
00036 static HxString className();
00037
00038 private:
00039 ResultT _sum;
00040 int _cnt;
00041 HxSizes _size;
00042 };
00043
00044 template<class ResultT, class ArithT>
00045 inline HxString
00046 HxNgbMean<ResultT, ArithT>::className()
00047 {
00048 static HxString s("mean");
00049 return s;
00050 }
00051
00052 template<class ResultT, class ArithT>
00053 inline void
00054 HxNgbMean<ResultT, ArithT>::init(int, int, ArithT)
00055 {
00056 _cnt = 0;
00057 _sum = HxScalarInt(0);
00058 }
00059
00060 template<class ResultT, class ArithT>
00061 inline void
00062 HxNgbMean<ResultT, ArithT>::next(int, int, ArithT value)
00063 {
00064 _cnt++;
00065 _sum += ResultT(value);
00066 }
00067
00068 template<class ResultT, class ArithT>
00069 inline void
00070 HxNgbMean<ResultT, ArithT>::next(int, int, int, ArithT value)
00071 {
00072 _cnt++;
00073 _sum += ResultT(value);
00074 }
00075
00076 template<class ResultT, class ArithT>
00077 inline HxSizes
00078 HxNgbMean<ResultT, ArithT>::size()
00079 {
00080 return _size;
00081 }
00082
00083 template<class ResultT, class ArithT>
00084 inline ArithT
00085 HxNgbMean<ResultT, ArithT>::result() const
00086 {
00087 return _sum / ResultT(HxScalarInt(_cnt));
00088 }
00089
00090 #ifdef INC_TEMPLATE_SRC
00091 #include "HxNgbMean.c"
00092 #endif
00093
00094 #endif