arduino-audio-tools
Loading...
Searching...
No Matches
QueueFromVector.h
Go to the documentation of this file.
1#pragma once
2#include <assert.h>
4
5namespace audio_tools {
6
14template <class T>
16 public:
19 resize(size);
20 };
21
22 bool enqueue(T& data){
23 if (is_full())
24 return false;
25 vector[_end_pos++] = data;
26 return true;
27 }
28
29 bool peek(T& data){
30 if (_end_pos <= 0 ) {
31 assert(_end_pos == 0);
32 data = null_value;
33 _end_pos = 0;
34 return false;
35 }
36 data = vector[0];
37 return true;
38 }
39
40 bool dequeue(T& data){
41 if (_end_pos <= 0 ) {
42 assert(_end_pos == 0);
43 data = null_value;
44 _end_pos = 0;
45 return false;
46 }
47 // provide data at haed
48 data = vector[0];
49 // shift remaining data to the left by 1 position
50 if (_end_pos > 1) {
51 memmove(&vector[0], &vector[1], (_end_pos-1)*sizeof(T));
52 }
54 return true;
55 }
56
57 size_t size() {
58 return _end_pos < 0 ? 0 : _end_pos;
59 }
60
64 bool resize(size_t size) {
65 size_t old_capacity = vector.size();
66 if (!vector.resize(size)){
67 return false;
68 }
69 if (size > old_capacity) {
70 // initialize the newly added, still uninitialized slots
71 for (size_t j = old_capacity; j < size; j++){
72 vector[j] = null_value;
73 }
74 } else if ((size_t)_end_pos > size) {
75 LOGW("resize() drops %d queued element(s): new capacity is smaller",
76 (int)(_end_pos - size));
77 _end_pos = size;
78 }
79 return true;
80 }
81
82 bool clear() {
83 for (int j=0;j<vector.size();j++){
84 vector[j] = null_value;
85 }
86 _end_pos = 0;
87 return true;
88 }
89
90 bool empty() {
91 return _end_pos == 0;
92 }
93
94 bool is_full() {
95 return _end_pos >= vector.size();
96 }
97
98 size_t capacity() { return vector.size(); }
99
100 void setAllocator(Allocator &allocator){
101 vector.setAllocator(allocator);
102 }
103
105 return vector;
106 }
107
108 protected:
110 int32_t _end_pos = 0;
112};
113
114}
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define assert(T)
Definition avr.h:10
Memory allocateator which uses malloc.
Definition Allocator.h:25
FIFO Queue which is based on a Vector.
Definition QueueFromVector.h:15
size_t size()
Definition QueueFromVector.h:57
Vector< T > & toVector()
Definition QueueFromVector.h:104
QueueFromVector(size_t size, T empty)
Definition QueueFromVector.h:17
bool empty()
Definition QueueFromVector.h:90
bool peek(T &data)
Definition QueueFromVector.h:29
bool dequeue(T &data)
Definition QueueFromVector.h:40
T null_value
Definition QueueFromVector.h:111
bool clear()
Definition QueueFromVector.h:82
Vector< T > vector
Definition QueueFromVector.h:109
bool is_full()
Definition QueueFromVector.h:94
bool enqueue(T &data)
Definition QueueFromVector.h:22
void setAllocator(Allocator &allocator)
Definition QueueFromVector.h:100
bool resize(size_t size)
Definition QueueFromVector.h:64
int32_t _end_pos
Definition QueueFromVector.h:110
size_t capacity()
Definition QueueFromVector.h:98
Vector implementation which provides the most important methods as defined by std::vector....
Definition Vector.h:21
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6