mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
Subsections are alphabetized according to lexographic ordering. Also, HAL includes were moved from headers to source files where possible. This change may cause user code which uses HAL functionality and does not include the relevant HAL header (since it may have been provided by another WPILib header) to fail to compile.
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* 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 <stddef.h>
|
|
|
|
#include <vector>
|
|
|
|
/**
|
|
* This is a simple circular buffer so we don't need to "bucket brigade" copy
|
|
* old values.
|
|
*/
|
|
template <class T>
|
|
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<T> 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"
|