00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _eoUpdater_h
00028 #define _eoUpdater_h
00029
00030 #include <string>
00031 #include <eoFunctor.h>
00032 #include <utils/eoState.h>
00033 #include <utils/eoParam.h>
00034
00035 template <class EOT> class eoCheckPoint;
00036
00041 class eoUpdater : public eoF<void>
00042 {
00043 public:
00044 virtual void lastCall() {}
00045 virtual std::string className(void) const { return "eoUpdater"; }
00046
00047 template <class EOT>
00048 eoUpdater& addTo(eoCheckPoint<EOT>& cp) { cp.add(*this); return *this; }
00049 };
00050
00054 template <class T>
00055 class eoIncrementor : public eoUpdater
00056 {public :
00058 eoIncrementor(T& _counter, T _stepsize = 1) : counter(_counter), stepsize(_stepsize) {}
00059
00061 virtual void operator()()
00062 {
00063 counter += stepsize;
00064 }
00065
00066 virtual std::string className(void) const { return "eoIncrementor"; }
00067 private:
00068 T& counter;
00069 T stepsize;
00070 };
00071
00075 template <class T>
00076 class eoIncrementorParam : public eoUpdater, public eoValueParam<T>
00077 {
00078 public:
00079
00080 using eoValueParam<T>::value;
00081
00083 eoIncrementorParam( std::string _name, T _stepsize = 1) :
00084 eoValueParam<T>(T(0), _name), stepsize(_stepsize) {}
00085
00089 eoIncrementorParam( std::string _name, T _countValue, T _stepsize) :
00090 eoValueParam<T>(_countValue, _name), stepsize(_stepsize) {}
00091
00093 virtual void operator()()
00094 {
00095 value() += stepsize;
00096 }
00097
00098 virtual std::string className(void) const { return "eoIncrementorParam"; }
00099
00100 private:
00101 T stepsize;
00102 };
00103
00104 #include <time.h>
00105
00109 class eoTimedStateSaver : public eoUpdater
00110 {
00111 public :
00112 eoTimedStateSaver(time_t _interval, const eoState& _state, std::string _prefix = "state", std::string _extension = "sav") : state(_state),
00113 interval(_interval), last_time(time(0)), first_time(time(0)),
00114 prefix(_prefix), extension(_extension) {}
00115
00116 void operator()(void);
00117
00118 virtual std::string className(void) const { return "eoTimedStateSaver"; }
00119 private :
00120 const eoState& state;
00121
00122 const time_t interval;
00123 time_t last_time;
00124 const time_t first_time;
00125 const std::string prefix;
00126 const std::string extension;
00127 };
00128
00132 class eoCountedStateSaver : public eoUpdater
00133 {
00134 public :
00135 eoCountedStateSaver(unsigned _interval, const eoState& _state, std::string _prefix, bool _saveOnLastCall, std::string _extension = "sav", unsigned _counter = 0)
00136 : state(_state), interval(_interval), counter(_counter),
00137 saveOnLastCall(_saveOnLastCall),
00138 prefix(_prefix), extension(_extension) {}
00139
00140 eoCountedStateSaver(unsigned _interval, const eoState& _state, std::string _prefix = "state", std::string _extension = "sav", unsigned _counter = 0)
00141 : state(_state), interval(_interval), counter(_counter),
00142 saveOnLastCall(true),
00143 prefix(_prefix), extension(_extension) {}
00144
00145 virtual void lastCall(void);
00146 void operator()(void);
00147
00148 virtual std::string className(void) const { return "eoCountedStateSaver"; }
00149 private :
00150 void doItNow(void);
00151
00152 const eoState& state;
00153 const unsigned interval;
00154 unsigned counter;
00155 bool saveOnLastCall;
00156
00157 const std::string prefix;
00158 const std::string extension;
00159 };
00160
00161
00162 #endif