EvolvingObjects
eoFuncPtrStat.h
00001 #ifndef eoFuncPtrStat_h
00002 #define eoFuncPtrStat_h
00003 
00004 #include <eoFunctorStore.h>
00005 #include <utils/eoStat.h>
00006 
00007 
00008 
00015 template <class EOT, class T>
00016 class eoFuncPtrStat : public eoStat<EOT, T>
00017 {
00018 public :
00019     typedef T (*func_t)(const eoPop<EOT>&);
00020 
00021 
00022     eoFuncPtrStat(func_t f, std::string _description = "func_ptr")
00023         : eoStat<EOT, T>(T(), _description), func(f)
00024         {}
00025 
00026     using eoStat<EOT, T>::value;
00027 
00028     void operator()(const eoPop<EOT>& pop) {
00029         value() = func(pop);
00030     }
00031 
00032 private:
00033     func_t func;
00034 };
00035 
00039 template <class EOT, class T>
00040 eoFuncPtrStat<EOT, T>& makeFuncPtrStat( T (*func)(const eoPop<EOT>&), eoFunctorStore& store, std::string description = "func") {
00041     return store.storeFunctor(
00042         new eoFuncPtrStat<EOT, T>( func, description)
00043         );
00044 }
00045 
00052 template <class EOT, class T>
00053 class eoFunctorStat : public eoStat<EOT, T>
00054 {
00055 public :
00056     eoFunctorStat(eoUF< const eoPop<EOT>&, T >& f, std::string _description = "functor")
00057         : eoStat<EOT, T>(T(), _description), func(f)
00058         {}
00059 
00060     using eoStat<EOT, T>::value;
00061 
00062     void operator()(const eoPop<EOT>& pop) {
00063         value() = func(pop);
00064     }
00065 
00066 private:
00067     eoUF< const eoPop<EOT>&, T >& func;
00068 };
00069 
00073 template <class EOT, class T>
00074 eoFunctorStat<EOT, T>& makeFunctorStat( eoUF< const eoPop<EOT>&, T >& func, eoFunctorStore& store, std::string description = "func") {
00075     return store.storeFunctor(
00076         new eoFunctorStat<EOT, T>( func, description)
00077         );
00078 }
00079 
00080 #endif
 All Classes Namespaces Files Functions Variables Typedefs Friends