/* * Process.hpp * * Created on: 15 èþë. 2019 ã. * Author: titov */ #ifndef SOURCE_SYSTEMIC_PROCESS_HPP_ #define SOURCE_SYSTEMIC_PROCESS_HPP_ #include "IProcess.hh" namespace systemic { template struct Process : public IProcess { T & obj; void process() { obj.process(); } Process( T & object ) : obj(object) {} }; template struct ProcessDecimator : public IProcess { T & obj; void process() { if( ++counter == period ) { obj.process(); counter = 0; } } const unsigned int period; unsigned int counter; ProcessDecimator( T & object, unsigned int decimal ) : obj(object), period(decimal + (not decimal)), counter(0) {} }; template struct PeriodicProcess : public IProcess { T & obj; void process() { obj.process(); } void setSampleTime( float ts_in_second ) { obj.setSampleTime( ts_in_second ); } PeriodicProcess( T & object ) : obj(object) {} }; template struct PeriodicProcessDecimator : public IProcess { T & obj; void process() { if( ++counter == period ) { obj.process(); counter = 0; } } void setSampleTime( float ts_in_second ) { obj.setSampleTime( ts_in_second * period ); } const unsigned int period; unsigned int counter; PeriodicProcessDecimator( T & object, unsigned int decimal ) : obj(object), period(decimal + (not decimal)), counter(0) {} }; template struct ProcessController : public IProcess, public IProcessControl { bool en_flag; T & obj; void enable() { en_flag = true; } void disable() { en_flag = false; } void process() { if(en_flag) obj.process(); } ProcessController( T & object ) : obj(object), en_flag(false) {} }; template struct PeriodicProcessController : public IProcess, public IProcessControl { bool en_flag; T & obj; void enable() { en_flag = true; } void disable() { en_flag = false; } void process() { if(en_flag) obj.process(); } void setSampleTime( float ts_in_second ) { obj.setSampleTime( ts_in_second ); } PeriodicProcessController( T & object ) : obj(object), en_flag(false) {} }; } #endif /* SOURCE_SYSTEMIC_PROCESS_HPP_ */