MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/systemic/Process.hpp
2024-06-07 11:12:56 +03:00

123 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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