/* * © Copyright 2014 – Urheberrechtshinweis * Alle Rechte vorbehalten / All Rights Reserved * * Programmcode ist urheberrechtlich geschuetzt. * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. * Keine Verwendung ohne explizite Genehmigung. * (vgl. § 106 ff UrhG / § 97 UrhG) */ #ifndef DELAYBUFFER_H #define DELAYBUFFER_H #include /** efficient delay using a ring-buffer */ template class DelayBuffer { size_t head = 0; std::vector vec; public: /** ctor */ DelayBuffer(int size) { vec.resize(size); } /** set all elements to the same value */ void setAll(const Scalar s) { std::fill(vec.begin(), vec.end(), s); } /** append a new element, get the delayed output */ Scalar add(Scalar s) { vec[head] = s; head = (head + 1) % vec.size(); // next to-be-overwritten element = oldest element = tail return vec[head]; } }; #endif // DELAYBUFFER_H