diff --git a/delay/ringbuffer.hpp b/delay/buffer.hpp similarity index 88% rename from delay/ringbuffer.hpp rename to delay/buffer.hpp index 1d7680d..24416c0 100644 --- a/delay/ringbuffer.hpp +++ b/delay/buffer.hpp @@ -23,8 +23,8 @@ * Author Jens Ahrensfeld on 26.10.2025. */ -#ifndef DSP_RINGBUFFER_H -#define DSP_RINGBUFFER_H +#ifndef DSP_BUFFER_H +#define DSP_BUFFER_H #include #include @@ -35,7 +35,7 @@ namespace dsp { template -class RingBuffer +class Buffer { uint m_index; uint m_mask; @@ -43,7 +43,7 @@ class RingBuffer vector m_buffer; public: - RingBuffer(size_t capacity) + Buffer(size_t capacity) : m_index(0) , m_mask(0) , m_capacity(0) @@ -84,31 +84,35 @@ class RingBuffer return m_buffer[(m_index + (uint)offset) & m_mask]; } - RingBuffer & operator ++() + Buffer & operator ++() { ++m_index; + m_index &= m_mask; return *this; } - RingBuffer & operator +=(int i) + Buffer & operator +=(int i) { m_index += (uint)i; + m_index &= m_mask; return *this; } - RingBuffer & operator --() + Buffer & operator --() { --m_index; + m_index &= m_mask; return *this; } - RingBuffer & operator -=(int i) + Buffer & operator -=(int i) { m_index -= (uint)i; + m_index &= m_mask; return *this; } }; } -#endif +#endif // DSP_BUFFER_H diff --git a/delay/tests/Makefile b/delay/tests/Makefile index 0405b76..171f6c5 100644 --- a/delay/tests/Makefile +++ b/delay/tests/Makefile @@ -5,7 +5,7 @@ CC=clang CCC=clang++ CXX=clang++ -NAME := test_dsp_ringbuffer +NAME := test_dsp_buffer CONFIG ?= debug TARGET ?= $(NAME) @@ -13,7 +13,7 @@ CXXFLAGS += -std=c++20 INCLUDES += -I $(realpath .) -I $(realpath ../../) -CXX_SRCS := test_ringbuffer.cpp +CXX_SRCS := test_buffer.cpp LIBS := -lstdc++ diff --git a/delay/tests/test_buffer.cpp b/delay/tests/test_buffer.cpp new file mode 100644 index 0000000..bb5347d --- /dev/null +++ b/delay/tests/test_buffer.cpp @@ -0,0 +1,37 @@ +#include +#include +#include + +#include +#include + +void print(std::ranges::input_range auto&& range) +{ + for(const auto&i : range) + { + std::cout << i << std::endl; + } +} + +int main() +{ + dsp::Buffer buffer(10); + printf("Buffer capacity = %zu\n", buffer.capacity()); + for (int i=0; i < 10; i++) + { + buffer[i] = i+1; + } + buffer += 5; + + for (int i=-5; i < 5; i++) + { + int v = buffer[i]; + printf("i=%d: v=%d\n", i, v); + } + + std::vector numbers{1, 2, 3, 4, 5}; + auto v{std::views::take(numbers, 3)}; + print<>(v); + + return 0; +} \ No newline at end of file diff --git a/delay/tests/test_ringbuffer.cpp b/delay/tests/test_ringbuffer.cpp deleted file mode 100644 index 3d19d01..0000000 --- a/delay/tests/test_ringbuffer.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - - -int main() -{ - dsp::RingBuffer buffer(10); - printf("Buffer capacity = %zu\n", buffer.capacity()); - for (int i=0; i < 10; i++) - { - buffer[i] = i+1; - } - buffer += 5; - - for (int i=-5; i < 5; i++) - { - int v = buffer[i]; - printf("i=%d: v=%d\n", i, v); - } - - - return 0; -} \ No newline at end of file