F´ Flight Software - C/C++ Documentation  NASA-v2.0.0
A framework for building embedded system applications to NASA flight quality standards.
CircularBuffer.hpp
Go to the documentation of this file.
1 /*
2  * CircularBuffer.hpp:
3  *
4  * Buffer used to efficiently store data in ring data structure. Uses an externally supplied
5  * data store as the backing for this buffer. Thus it is dependent on receiving sole ownership
6  * of the supplied buffer.
7  *
8  * Note: this given implementation loses one byte of the data store in order to ensure that a
9  * separate wrap-around tracking variable is not needed.
10  *
11  * Created on: Apr 4, 2019
12  * Author: lestarch
13  */
14 #include <FpConfig.hpp>
15 #include <Fw/Types/BasicTypes.hpp>
17 
18 #ifndef TYPES_CIRCULAR_BUFFER_HPP
19 #define TYPES_CIRCULAR_BUFFER_HPP
20 
21 //#define CIRCULAR_DEBUG
22 
23 // An assertion to guarantee the self-consistency of a head/tail pointer w.r.t. the store and size
24 #define ASSERT_CONSISTENT(store, size, X) \
25  FW_ASSERT(X >= store && X < (store + size), \
26  reinterpret_cast<POINTER_CAST>(X), \
27  reinterpret_cast<POINTER_CAST>(store))
28 
29 namespace Types {
30 
32  public:
42  CircularBuffer(U8* const buffer, const NATIVE_UINT_TYPE size);
43 
51  Fw::SerializeStatus serialize(const U8* const buffer, const NATIVE_UINT_TYPE size);
52 
59  Fw::SerializeStatus peek(char& value, NATIVE_UINT_TYPE offset = 0);
66  Fw::SerializeStatus peek(U8& value, NATIVE_UINT_TYPE offset = 0);
73  Fw::SerializeStatus peek(U32& value, NATIVE_UINT_TYPE offset = 0);
74 
82  Fw::SerializeStatus peek(U8* buffer, NATIVE_UINT_TYPE size, NATIVE_UINT_TYPE offset = 0);
83 
91 
97  NATIVE_UINT_TYPE get_remaining_size(bool serialization = false);
98 
104 
105 #ifdef CIRCULAR_DEBUG
106  void print();
107 #endif
108  private:
115  U8* increment(U8* const pointer, NATIVE_UINT_TYPE amount = 1);
117  U8* const m_store;
119  const NATIVE_UINT_TYPE m_size;
121  U8* m_head;
123  U8* m_tail;
124 };
125 } //End Namespace Types
126 #endif
127 
Types::CircularBuffer::serialize
Fw::SerializeStatus serialize(const U8 *const buffer, const NATIVE_UINT_TYPE size)
Definition: CircularBuffer.cpp:54
Fw::SerializeStatus
SerializeStatus
forward declaration for string
Definition: Serializable.hpp:14
Serializable.hpp
U8
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.hpp:76
Types::CircularBuffer::get_remaining_size
NATIVE_UINT_TYPE get_remaining_size(bool serialization=false)
Definition: CircularBuffer.cpp:33
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
Types::CircularBuffer::rotate
Fw::SerializeStatus rotate(NATIVE_UINT_TYPE amount)
Definition: CircularBuffer.cpp:136
Types::CircularBuffer::peek
Fw::SerializeStatus peek(char &value, NATIVE_UINT_TYPE offset=0)
Definition: CircularBuffer.cpp:76
Types
Definition: CircularBuffer.cpp:24
FpConfig.hpp
ISF configuration file.
Types::CircularBuffer::CircularBuffer
CircularBuffer(U8 *const buffer, const NATIVE_UINT_TYPE size)
Definition: CircularBuffer.cpp:26
Types::CircularBuffer::get_capacity
NATIVE_UINT_TYPE get_capacity()
Definition: CircularBuffer.cpp:150
Types::CircularBuffer
Definition: CircularBuffer.hpp:31
BasicTypes.hpp
Declares ISF basic types.