ardupilot/libraries/AP_Buffer/AP_Buffer.h
Tobias dc62398821 AP_Buffer: add comments and rename functions to conform with the
STL-container naming conventions
Comment format changes by Randy
2013-10-27 13:41:36 +09:00

70 lines
2.2 KiB
C++

// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/// @file AP_Buffer.h
/// @brief fifo (queue) buffer template class
#ifndef __AP_BUFFER_H__
#define __AP_BUFFER_H__
#include <stdint.h>
/// @class AP_Buffer
template <class T, uint8_t SIZE>
class AP_Buffer {
public:
/// Constructor
///
AP_Buffer();
/// clear - removes all elements from the queue
///
void clear();
/// push_back - adds an item to the end of the buffer.
/// If the buffer is full, the oldest element (i.e. the element at the begin) is removed
/// @param item
void push_back( const T &item );
/// pop_front - removes an element from the begin of the buffer (i.e. the oldest element)
/// and returns it. If the buffer is empty, 0 is returned
/// @return
T pop_front();
/// peek - returns a reference to an element of the buffer
/// if position isn't valid (i.e. >= size()) 0 is returned
/// @param position : index of the element
/// "0" is the oldest, size()-1 is the newest
/// @return
const T& peek(uint8_t position) const;
/// front - return a reference to the element at the begin of the queue (i.e. the oldest element)
/// If the queue is empty, 0 is returned.
/// @return : oldest element
const T& front() const { return this->peek(0); }
/// size - returns the number of elements in the queue
/// @return
uint8_t size() const { return _num_items; }
/// is_full - return true if the queue is full (i.e. size() == SIZE)
/// @return
bool is_full() const { return _num_items >= SIZE; }
/// is_empty - returns true if the queue is empty
/// @return
bool is_empty() const { return _num_items == 0; }
private:
uint8_t _num_items; // number of items in the buffer
uint8_t _head; // first item in the buffer (will be returned with the next pop_front call)
T _buff[SIZE]; // x values of each point on the curve
};
// Typedef for convenience - add more as needed
// (The used template instances have also to be instantiated explicitly in the source file.)
typedef AP_Buffer<float,5> AP_BufferFloat_Size5;
typedef AP_Buffer<float,15> AP_BufferFloat_Size15;
#endif // __AP_BUFFER_H__