1
0
forked from fsfw/fsfw

new fifo init

This commit is contained in:
2020-07-06 13:26:58 +02:00
parent 3cd946fef8
commit ec212d9fcf
4 changed files with 174 additions and 72 deletions

View File

@ -1,82 +1,26 @@
#ifndef FIFO_H_
#define FIFO_H_
#ifndef FRAMEWORK_CONTAINER_FIFO_H_
#define FRAMEWORK_CONTAINER_FIFO_H_
#include <framework/returnvalues/HasReturnvaluesIF.h>
#include <framework/container/FIFOBase.h>
#include <vector>
/**
* @brief Simple First-In-First-Out data structure
* @brief Simple First-In-First-Out data structure. The maximum size
* can be set in the constructor. THe public interface of
* FIFOBase exposes the user interface for the FIFO.
* @tparam T Entry Type
* @tparam capacity Maximum capacity
*/
template<typename T, uint8_t capacity>
class FIFO {
private:
uint8_t readIndex, writeIndex, currentSize;
T data[capacity];
uint8_t next(uint8_t current) {
++current;
if (current == capacity) {
current = 0;
}
return current;
}
template<typename T>
class FIFO: public FIFOBase<T> {
public:
FIFO() :
readIndex(0), writeIndex(0), currentSize(0) {
}
FIFO(size_t maxCapacity): FIFOBase<T>(values.data(), maxCapacity) {
values.reserve(maxCapacity);
values.resize(maxCapacity);
};
bool empty() {
return (currentSize == 0);
}
bool full() {
return (currentSize == capacity);
}
uint8_t size(){
return currentSize;
}
ReturnValue_t insert(T value) {
if (full()) {
return FULL;
} else {
data[writeIndex] = value;
writeIndex = next(writeIndex);
++currentSize;
return HasReturnvaluesIF::RETURN_OK;
}
}
ReturnValue_t retrieve(T *value) {
if (empty()) {
return EMPTY;
} else {
*value = data[readIndex];
readIndex = next(readIndex);
--currentSize;
return HasReturnvaluesIF::RETURN_OK;
}
}
ReturnValue_t peek(T * value) {
if(empty()) {
return EMPTY;
} else {
*value = data[readIndex];
return HasReturnvaluesIF::RETURN_OK;
}
}
ReturnValue_t pop() {
T value;
return this->retrieve(&value);
}
static const uint8_t INTERFACE_ID = CLASS_ID::FIFO_CLASS;
static const ReturnValue_t FULL = MAKE_RETURN_CODE(1);
static const ReturnValue_t EMPTY = MAKE_RETURN_CODE(2);
private:
std::vector<T> values;
};
#endif /* FIFO_H_ */
#endif /* FRAMEWORK_CONTAINER_FIFO_H_ */