@@ -85,7 +85,7 @@ class BaseBuffer {
85
85
virtual bool peek (T &result) = 0;
86
86
87
87
// / checks if the buffer is full
88
- virtual bool isFull () = 0;
88
+ virtual bool isFull () { return availableForWrite () == 0 ; }
89
89
90
90
bool isEmpty () { return available () == 0 ; }
91
91
@@ -409,7 +409,7 @@ class RingBuffer : public BaseBuffer<T> {
409
409
*
410
410
* @ingroup buffers
411
411
* @tparam File: file class
412
- * @tparam T: the buffered object type
412
+ * @tparam T: the buffered object type
413
413
*/
414
414
template <class File , typename T>
415
415
class RingBufferFile : public BaseBuffer <T> {
@@ -548,7 +548,8 @@ class RingBufferFile : public BaseBuffer<T> {
548
548
int len1 = 0 ; // length of second part on overflow
549
549
};
550
550
551
- // / Get positons and sizes to handle overflow wrapping to prevent writing past max_size
551
+ // / Get positons and sizes to handle overflow wrapping to prevent writing past
552
+ // / max_size
552
553
OffsetInfo getOffset (int pos, int len) {
553
554
OffsetInfo result;
554
555
result.pos = pos;
@@ -596,7 +597,7 @@ class RingBufferFile : public BaseBuffer<T> {
596
597
int file_read (T *result, int count) {
597
598
LOGD (" file_read: %d" , count);
598
599
int read_bytes = count * sizeof (T);
599
- int result_bytes = p_file->read (( uint8_t *)result, read_bytes);
600
+ int result_bytes = p_file->readBytes (( char *)result, read_bytes);
600
601
int result_count = result_bytes / sizeof (T);
601
602
if (result_count != count) {
602
603
LOGE (" readBytes: %d -> %d" , read_bytes, result_bytes);
@@ -844,6 +845,7 @@ class NBuffer : public BaseBuffer<T> {
844
845
*/
845
846
template <class File , typename T>
846
847
class NBufferFile : public BaseBuffer <T> {
848
+ public:
847
849
// / Provide the file size in objects!
848
850
NBufferFile (int fileSize) { number_of_objects_per_file = fileSize; }
849
851
// / RAII close the files
@@ -868,7 +870,7 @@ class NBufferFile : public BaseBuffer<T> {
868
870
return true ;
869
871
}
870
872
871
- bool read (T &result) override { return readArray (result, 1 ) == 1 ; }
873
+ bool read (T &result) override { return readArray (& result, 1 ) == 1 ; }
872
874
873
875
int readArray (T data[], int len) override {
874
876
// make sure we have a read file
@@ -900,7 +902,7 @@ class NBufferFile : public BaseBuffer<T> {
900
902
901
903
bool write (T sample) override { return writeArray (&sample, 1 ) == 1 ; }
902
904
903
- int writeArray (T data[], int len) override {
905
+ int writeArray (const T data[], int len) override {
904
906
if (!write_file || write_file.size () + len > number_of_objects_per_file) {
905
907
// moved to filled files
906
908
if (write_file) {
@@ -927,7 +929,7 @@ class NBufferFile : public BaseBuffer<T> {
927
929
write_file.available () + open_current;
928
930
}
929
931
930
- int size () { return number_of_objects_per_file * file_count; }
932
+ size_t size () override { return number_of_objects_per_file * file_count; }
931
933
932
934
// / clean up files
933
935
void end () {
@@ -943,6 +945,26 @@ class NBufferFile : public BaseBuffer<T> {
943
945
file_delete_callback = cb;
944
946
}
945
947
948
+ void reset () {
949
+ if (read_file) {
950
+ read_file.seek (0 );
951
+ empty_files.enqueue (read_file);
952
+ read_file = empty;
953
+ }
954
+ if (write_file) {
955
+ write_file.seek (0 );
956
+ empty_files.enqueue (write_file);
957
+ write_file = empty;
958
+ }
959
+ File file;
960
+ while (filled_files.dequeue (file)) {
961
+ file.seek (0 );
962
+ empty_files.enqueue (file);
963
+ }
964
+ }
965
+ // / not supported
966
+ T *address () { return nullptr ; }
967
+
946
968
protected:
947
969
Queue<File> empty_files;
948
970
Queue<File> filled_files;
0 commit comments