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_ */
|