MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/common/Delay.hh

39 lines
985 B
C++

/*
* Delay.h
*
* Created on: 2 ìàÿ 2017 ã.
* Author: titov
*/
#ifndef SOURCES_COMMON_DELAY_H_
#define SOURCES_COMMON_DELAY_H_
//! Çâåíî çàäåðæêè íà êîëüöåâîì áóôåðå.
//! T - Òèï äàííûõ.
//! size - Ðàçìåð áóôåðà, äîëæåí áûòü êðàòåí 2.
template<typename T, unsigned int size>
struct Delay {
private:
static const unsigned int mask = size - 1; //!< Ìàñêà çàùèòû îò ïåðåïîëíåíèÿ.
T buff[size]; //!< Áóôåð çàäåðæèûâàåìûõ ýëåìåíòîâ.
unsigned int index; //!< Òåêóùèé èíäåêñ â ìàññèâå.
public:
//! Îïåðàòîð çàäåðæêè.
T operator()(T item) {
const unsigned int prev_index(index);
buff[ ++index & mask ] = item;
return buff[ ( prev_index ) & mask ];
}
//! Îïåðàòîð äîáàâëåíèÿ äàííûõ.
Delay & operator<<(T item) {
buff[ ++index & mask ] = item;
return *this;
}
//! Îïåðàòîð ïîëó÷åíèÿ äàííûõ çàïàçäûâàþùèõ íà ïðîèçâîëüíîå êîëè÷åñòâî òàêòîâ.
T operator[](int i) const {
return buff[ ( index - i ) & mask ];
}
};
#endif /* SOURCES_COMMON_DELAY_H_ */