/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2015-2016. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #pragma once #include #include /** * This is a simple circular buffer so we don't need to "bucket brigade" copy * old values. */ template class CircularBuffer { public: CircularBuffer(size_t size); void PushFront(T value); void PushBack(T value); T PopFront(); T PopBack(); void Reset(); T& operator[](size_t index); const T& operator[](size_t index) const; private: std::vector m_data; // Index of element at front of buffer size_t m_front = 0; // Number of elements used in buffer size_t m_length = 0; size_t ModuloInc(size_t index); size_t ModuloDec(size_t index); }; #include "CircularBuffer.inc"