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
00039 class eoUpdater : public eoF<void>
00040 {
00041 public:
00042 virtual void lastCall() {}
00043 virtual std::string className(void) const { return "eoUpdater"; }
00044 };
00045
00049 template <class T>
00050 class eoIncrementor : public eoUpdater
00051 {public :
00053 eoIncrementor(T& _counter, T _stepsize = 1) : counter(_counter), stepsize(_stepsize) {}
00054
00056 virtual void operator()()
00057 {
00058 counter += stepsize;
00059 }
00060
00061 virtual std::string className(void) const { return "eoIncrementor"; }
00062 private:
00063 T& counter;
00064 T stepsize;
00065 };
00066
00070 template <class T>
00071 class eoIncrementorParam : public eoUpdater, public eoValueParam<T>
00072 {
00073 public:
00074
00075 using eoValueParam<T>::value;
00076
00078 eoIncrementorParam( std::string _name, T _stepsize = 1) :
00079 eoValueParam<T>(T(0), _name), stepsize(_stepsize) {}
00080
00084 eoIncrementorParam( std::string _name, T _countValue, T _stepsize) :
00085 eoValueParam<T>(_countValue, _name), stepsize(_stepsize) {}
00086
00088 virtual void operator()()
00089 {
00090 value() += stepsize;
00091 }
00092
00093 virtual std::string className(void) const { return "eoIncrementorParam"; }
00094
00095 private:
00096 T stepsize;
00097 };
00098
00099 #include <time.h>
00100
00104 class eoTimedStateSaver : public eoUpdater
00105 {
00106 public :
00107 eoTimedStateSaver(time_t _interval, const eoState& _state, std::string _prefix = "state", std::string _extension = "sav") : state(_state),
00108 interval(_interval), last_time(time(0)), first_time(time(0)),
00109 prefix(_prefix), extension(_extension) {}
00110
00111 void operator()(void);
00112
00113 virtual std::string className(void) const { return "eoTimedStateSaver"; }
00114 private :
00115 const eoState& state;
00116
00117 const time_t interval;
00118 time_t last_time;
00119 const time_t first_time;
00120 const std::string prefix;
00121 const std::string extension;
00122 };
00123
00127 class eoCountedStateSaver : public eoUpdater
00128 {
00129 public :
00130 eoCountedStateSaver(unsigned _interval, const eoState& _state, std::string _prefix, bool _saveOnLastCall, std::string _extension = "sav", unsigned _counter = 0)
00131 : state(_state), interval(_interval), counter(_counter),
00132 saveOnLastCall(_saveOnLastCall),
00133 prefix(_prefix), extension(_extension) {}
00134
00135 eoCountedStateSaver(unsigned _interval, const eoState& _state, std::string _prefix = "state", std::string _extension = "sav", unsigned _counter = 0)
00136 : state(_state), interval(_interval), counter(_counter),
00137 saveOnLastCall(true),
00138 prefix(_prefix), extension(_extension) {}
00139
00140 virtual void lastCall(void);
00141 void operator()(void);
00142
00143 virtual std::string className(void) const { return "eoCountedStateSaver"; }
00144 private :
00145 void doItNow(void);
00146
00147 const eoState& state;
00148 const unsigned interval;
00149 unsigned counter;
00150 bool saveOnLastCall;
00151
00152 const std::string prefix;
00153 const std::string extension;
00154 };
00155
00156
00157 #endif