commonlib
fifo_buffer_base.h
1 
11 #pragma once
12 
13 #include "direct_array_buffer.h"
14 
15 BEGIN_NAMESPACE_MEMORY
16 
20 template <typename T>
22 {
23 public:
28  FifoBufferBase(size_t aCapacity = 0);
29  virtual ~FifoBufferBase() = default;
30 
35  size_t getReadPos() override;
36 
41  size_t getWritePos() override;
42 
47  size_t getSize() override;
48 
53  size_t getRemainingSize() override;
54 
60  virtual void setCapacity(size_t aCapacity);
61 
66  size_t getCapacity() const override;
67 
72  virtual bool isFull();
73 
78  virtual void reset();
79 
84  std::recursive_mutex& getLock() override;
85 
91  void incrementReadPosition(size_t pos) override;
92 
98  void incrementWritePosition(size_t pos) override;
99 
100 protected:
101  mutable std::recursive_mutex lock;
102  size_t size{0};
103  size_t capacity{0};
104 
105 private:
106  size_t readPos{0};
107  size_t writePos{0};
108 };
109 
110 template <typename T>
112 {
114 }
115 
116 template <typename T>
118 {
119  std::lock_guard<std::recursive_mutex> guard(lock);
120  return readPos;
121 }
122 
123 template <typename T>
125 {
126  std::lock_guard<std::recursive_mutex> guard(lock);
127  return writePos;
128 }
129 
130 template <typename T>
132 {
133  std::lock_guard<std::recursive_mutex> guard(lock);
134  return size;
135 }
136 
137 template <typename T>
139 {
140  std::lock_guard<std::recursive_mutex> guard(lock);
141  return capacity - size;
142 }
143 
144 template <typename T>
145 void FifoBufferBase<T>::setCapacity(size_t aCapacity)
146 {
147  std::lock_guard<std::recursive_mutex> guard(lock);
148  capacity = aCapacity;
149  reset();
150 }
151 
152 template <typename T>
154 {
155  std::lock_guard<std::recursive_mutex> guard(lock);
156  return capacity;
157 }
158 
159 template <typename T>
161 {
162  std::lock_guard<std::recursive_mutex> guard(lock);
163  return (size == capacity) && (capacity > 0);
164 }
165 
166 template <typename T>
168 {
169  std::lock_guard<std::recursive_mutex> guard(lock);
170  readPos = writePos = size = 0;
171 }
172 
173 template <typename T>
175 {
176  std::lock_guard<std::recursive_mutex> guard(lock);
177 
178  readPos += pos;
179  if (readPos >= capacity)
180  readPos = readPos - capacity;
181  size -= pos;
182 }
183 
184 template <typename T>
186 {
187  std::lock_guard<std::recursive_mutex> guard(lock);
188 
189  writePos += pos;
190  if (writePos >= capacity)
191  writePos = writePos - capacity;
192  size += pos;
193 }
194 
195 template <typename T>
196 std::recursive_mutex& FifoBufferBase<T>::getLock()
197 {
198  return lock;
199 }
200 
201 END_NAMESPACE_MEMORY
size_t getRemainingSize() override
Function returns remaining size in values.
Definition: fifo_buffer_base.h:138
virtual void reset()
Function resets all positions to default value.
Definition: fifo_buffer_base.h:167
void incrementReadPosition(size_t pos) override
Function increments read position for N values.
Definition: fifo_buffer_base.h:174
The class FifoBufferBase is used to implement first-in-first-out (FIFO) buffers.
Definition: fifo_buffer_base.h:21
Interface to array-backed source buffers.
Definition: direct_array_buffer.h:24
virtual bool isFull()
Function returns true if buffer is full.
Definition: fifo_buffer_base.h:160
Interfaces for buffers which are backed by the array (circular buffers, array buffers, ...). On such buffers data transfering is done without without intermediate buffer.
size_t getSize() override
Function returns current buffer size in values.
Definition: fifo_buffer_base.h:131
std::recursive_mutex & getLock() override
Function return locking object.
Definition: fifo_buffer_base.h:196
virtual void setCapacity(size_t aCapacity)
Function allocates memory at the heap.
Definition: fifo_buffer_base.h:145
size_t getCapacity() const override
Function returns buffer capacity in values.
Definition: fifo_buffer_base.h:153
size_t getWritePos() override
Function returns current write position.
Definition: fifo_buffer_base.h:124
size_t getReadPos() override
Function returns current read position.
Definition: fifo_buffer_base.h:117
FifoBufferBase(size_t aCapacity=0)
The constructor creates an instance.
Definition: fifo_buffer_base.h:111
Interface to array-backed target buffers.
Definition: direct_array_buffer.h:131
void incrementWritePosition(size_t pos) override
Function increments write position for N values.
Definition: fifo_buffer_base.h:185