@@ -167,8 +167,7 @@ class SingleBuffer : public BaseBuffer<T> {
167
167
* @param size
168
168
*/
169
169
SingleBuffer (int size) {
170
- this ->max_size = size;
171
- buffer.resize (max_size);
170
+ buffer.resize (size);
172
171
reset ();
173
172
}
174
173
@@ -187,7 +186,7 @@ class SingleBuffer : public BaseBuffer<T> {
187
186
188
187
bool write (T sample) override {
189
188
bool result = false ;
190
- if (current_write_pos < max_size ) {
189
+ if (current_write_pos < buffer. size () ) {
191
190
buffer[current_write_pos++] = sample;
192
191
result = true ;
193
192
}
@@ -215,7 +214,7 @@ class SingleBuffer : public BaseBuffer<T> {
215
214
return max (result, 0 );
216
215
}
217
216
218
- int availableForWrite () override { return max_size - current_write_pos; }
217
+ int availableForWrite () override { return buffer. size () - current_write_pos; }
219
218
220
219
bool isFull () override { return availableForWrite () <= 0 ; }
221
220
@@ -256,20 +255,19 @@ class SingleBuffer : public BaseBuffer<T> {
256
255
// / If we load values directly into the address we need to set the avialeble
257
256
// / size
258
257
size_t setAvailable (size_t available_size) {
259
- size_t result = min (available_size, (size_t ) max_size );
258
+ size_t result = min (available_size, (size_t ) buffer. size () );
260
259
current_read_pos = 0 ;
261
260
current_write_pos = result;
262
261
return result;
263
262
}
264
263
265
264
266
- size_t size () { return max_size ; }
265
+ size_t size () { return buffer. size () ; }
267
266
268
267
void resize (int size) {
269
268
if (buffer.size () != size) {
270
269
TRACED ();
271
270
buffer.resize (size);
272
- max_size = size;
273
271
}
274
272
}
275
273
@@ -279,7 +277,6 @@ class SingleBuffer : public BaseBuffer<T> {
279
277
}
280
278
281
279
protected:
282
- int max_size = 0 ;
283
280
int current_read_pos = 0 ;
284
281
int current_write_pos = 0 ;
285
282
bool owns_buffer = true ;
@@ -607,7 +604,8 @@ class NBuffer : public BaseBuffer<T> {
607
604
if (start_time == 0l ) {
608
605
start_time = millis ();
609
606
}
610
- sample_count++;
607
+ if (result)
608
+ sample_count++;
611
609
612
610
return result;
613
611
}
@@ -624,8 +622,7 @@ class NBuffer : public BaseBuffer<T> {
624
622
if (result == 0 ) {
625
623
// make current read buffer available again
626
624
resetCurrent ();
627
- result =
628
- actual_read_buffer == nullptr ? 0 : actual_read_buffer->available ();
625
+ result = (actual_read_buffer == nullptr ) ? 0 : actual_read_buffer->available ();
629
626
}
630
627
return result;
631
628
}
@@ -702,13 +699,16 @@ class NBuffer : public BaseBuffer<T> {
702
699
if (buffer_size==size && buffer_count == count)
703
700
return ;
704
701
freeMemory ();
705
- filled_buffers.resize (count);
706
- available_buffers.resize (count);
702
+ // filled_buffers.resize(count);
703
+ // available_buffers.resize(count);
704
+ filled_buffers.clear ();
705
+ available_buffers.clear ();
707
706
708
707
buffer_count = count;
709
708
buffer_size = size;
710
709
for (int j = 0 ; j < count; j++) {
711
710
BaseBuffer<T>* buffer = new SingleBuffer<T>(size);
711
+ LOGD (" new buffer %p" , buffer);
712
712
available_buffers.enqueue (buffer);
713
713
}
714
714
}
@@ -720,28 +720,38 @@ class NBuffer : public BaseBuffer<T> {
720
720
uint16_t buffer_count = 0 ;
721
721
BaseBuffer<T> *actual_read_buffer = nullptr ;
722
722
BaseBuffer<T> *actual_write_buffer = nullptr ;
723
- QueueFromVector<BaseBuffer<T> *> available_buffers{0 , nullptr };
724
- QueueFromVector<BaseBuffer<T> *> filled_buffers{0 , nullptr };
723
+ // QueueFromVector<BaseBuffer<T> *> available_buffers{0, nullptr};
724
+ // QueueFromVector<BaseBuffer<T> *> filled_buffers{0, nullptr};
725
+ Queue<BaseBuffer<T> *> available_buffers;
726
+ Queue<BaseBuffer<T> *> filled_buffers;
725
727
unsigned long start_time = 0 ;
726
728
unsigned long sample_count = 0 ;
727
729
728
730
// empty constructor only allowed by subclass
729
731
NBuffer () = default ;
730
732
731
733
void freeMemory () {
732
- delete actual_write_buffer;
733
- actual_write_buffer = nullptr ;
734
- delete actual_read_buffer;
735
- actual_read_buffer = nullptr ;
736
-
734
+ if (actual_write_buffer){
735
+ LOGD (" deleting %p" , actual_write_buffer);
736
+ delete actual_write_buffer;
737
+ actual_write_buffer = nullptr ;
738
+ }
739
+ if (actual_read_buffer){
740
+ LOGD (" deleting %p" , actual_read_buffer);
741
+ delete actual_read_buffer;
742
+ actual_read_buffer = nullptr ;
743
+ }
744
+
737
745
BaseBuffer<T> *ptr = getNextAvailableBuffer ();
738
746
while (ptr != nullptr ) {
747
+ LOGD (" deleting %p" , ptr);
739
748
delete ptr;
740
749
ptr = getNextAvailableBuffer ();
741
750
}
742
751
743
752
ptr = getNextFilledBuffer ();
744
753
while (ptr != nullptr ) {
754
+ LOGD (" deleting %p" , ptr);
745
755
delete ptr;
746
756
ptr = getNextFilledBuffer ();
747
757
}
@@ -757,6 +767,7 @@ class NBuffer : public BaseBuffer<T> {
757
767
}
758
768
759
769
virtual BaseBuffer<T> *getNextAvailableBuffer () {
770
+ if (available_buffers.empty ()) return nullptr ;
760
771
BaseBuffer<T> *result = nullptr ;
761
772
available_buffers.dequeue (result);
762
773
return result;
@@ -767,6 +778,7 @@ class NBuffer : public BaseBuffer<T> {
767
778
}
768
779
769
780
virtual BaseBuffer<T> *getNextFilledBuffer () {
781
+ if (filled_buffers.empty ()) return nullptr ;
770
782
BaseBuffer<T> *result = nullptr ;
771
783
filled_buffers.dequeue (result);
772
784
return result;
0 commit comments