123 lines
2.4 KiB
C++
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_ */
|