MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/systemic/Process.hpp

123 lines
2.4 KiB
C++

/*
* Process.hpp
*
* Created on: 15 èþë. 2019 ã.
* Author: titov
*/
#ifndef SOURCE_SYSTEMIC_PROCESS_HPP_
#define SOURCE_SYSTEMIC_PROCESS_HPP_
#include "IProcess.hh"
namespace systemic {
template<typename T>
struct Process : public IProcess {
T & obj;
void process() {
obj.process();
}
Process( T & object ) : obj(object) {}
};
template<typename T>
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<typename T>
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<typename T>
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<typename T>
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<typename T>
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_ */