From 28e12ccb7f4a5e901b17cb84f1625815f9023cf9 Mon Sep 17 00:00:00 2001 From: Kemal Bidzhiev Date: Sat, 8 Aug 2026 13:02:23 +0200 Subject: [PATCH 1/3] empty ring buffer --- CMakeLists.txt | 7 ++++++- hello_world/CMakeLists.txt | 1 - hello_world/examples/CMakeLists.txt | 9 --------- hello_world/examples/basic_usage.cpp | 4 ---- ring_buffer/CMakeLists.txt | 10 ++++++++++ ring_buffer/ring_buffer.hpp | 1 + ring_buffer/tests/CMakeLists.txt | 13 +++++++++++++ ring_buffer/tests/ring_buffer_tests.cpp | 0 8 files changed, 30 insertions(+), 15 deletions(-) delete mode 100644 hello_world/examples/CMakeLists.txt delete mode 100644 hello_world/examples/basic_usage.cpp create mode 100644 ring_buffer/CMakeLists.txt create mode 100644 ring_buffer/ring_buffer.hpp create mode 100644 ring_buffer/tests/CMakeLists.txt create mode 100644 ring_buffer/tests/ring_buffer_tests.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f486d95..576a3a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,4 +68,9 @@ endif() # ------------------------------------------------------------------------------ add_subdirectory(hello_world) -# add_subdirectory(linked_list) +add_subdirectory(ring_buffer) + + + + + diff --git a/hello_world/CMakeLists.txt b/hello_world/CMakeLists.txt index 6952f35..0b526c0 100644 --- a/hello_world/CMakeLists.txt +++ b/hello_world/CMakeLists.txt @@ -11,4 +11,3 @@ target_include_directories(HelloWorld ) add_subdirectory(tests) -add_subdirectory(examples) diff --git a/hello_world/examples/CMakeLists.txt b/hello_world/examples/CMakeLists.txt deleted file mode 100644 index ce981cb..0000000 --- a/hello_world/examples/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -add_executable(basic_usage - basic_usage.cpp -) - -target_link_libraries(basic_usage - PRIVATE - HelloWorld -) - diff --git a/hello_world/examples/basic_usage.cpp b/hello_world/examples/basic_usage.cpp deleted file mode 100644 index 0039608..0000000 --- a/hello_world/examples/basic_usage.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include "hw.hpp" -#include - -int main() { std::cout << HW::hello() << std::endl; } diff --git a/ring_buffer/CMakeLists.txt b/ring_buffer/CMakeLists.txt new file mode 100644 index 0000000..2cc9ae8 --- /dev/null +++ b/ring_buffer/CMakeLists.txt @@ -0,0 +1,10 @@ +add_library(RingBuffer INTERFACE) + +target_sources(RingBuffer + INTERFACE + FILE_SET HEADERS + FILES + ring_buffer.hpp +) + +add_subdirectory(tests) diff --git a/ring_buffer/ring_buffer.hpp b/ring_buffer/ring_buffer.hpp new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/ring_buffer/ring_buffer.hpp @@ -0,0 +1 @@ +#pragma once diff --git a/ring_buffer/tests/CMakeLists.txt b/ring_buffer/tests/CMakeLists.txt new file mode 100644 index 0000000..b895bee --- /dev/null +++ b/ring_buffer/tests/CMakeLists.txt @@ -0,0 +1,13 @@ +add_executable(ring_buffer_tests + ring_buffer_tests.cpp +) + +target_link_libraries(ring_buffer_tests + PRIVATE + RingBuffer + #project_warnings + GTest::gtest_main +) + +include(GoogleTest) +gtest_discover_tests(ring_buffer_tests) diff --git a/ring_buffer/tests/ring_buffer_tests.cpp b/ring_buffer/tests/ring_buffer_tests.cpp new file mode 100644 index 0000000..e69de29 From a8679d66b6bd223e4242e13ca5f926d9e7ecd6ed Mon Sep 17 00:00:00 2001 From: Kemal Bidzhiev Date: Sat, 8 Aug 2026 13:35:35 +0200 Subject: [PATCH 2/3] sceleton --- ring_buffer/ring_buffer.hpp | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/ring_buffer/ring_buffer.hpp b/ring_buffer/ring_buffer.hpp index 6f70f09..ce09c6c 100644 --- a/ring_buffer/ring_buffer.hpp +++ b/ring_buffer/ring_buffer.hpp @@ -1 +1,44 @@ #pragma once + +#include + +namespace CONTAINERS { + +template class ring_buffer { + size_t size_; + size_t begin_, end_; + std::vector data_; + +public: + ring_buffer(size_t sz) { data_.reserve(sz); } + size_t size() const { return size_; } + size_t capacity() const { return data_.capacity(); } + +private: + bool is_full() const { return size_ == capacity(); } + bool is_empty() const { + if (begin_ == end_ && !is_full()) + return true; + return false; + } + +public: + bool push(const T &elem) { + if (is_full()) + return false; + data_[end_++] = T; + end_ %= capacity(); + ++size_; + return true; + } + bool pop() { + if (is_empty()) + return false; + ++begin; + begin %= capacity; + --size_; + return true; + } +}; + +} // namespace CONTAINERS From 6f80b59ff74a98eed3ec22595b0774221f0c38ac Mon Sep 17 00:00:00 2001 From: Kemal Bidzhiev Date: Wed, 12 Aug 2026 18:02:52 +0200 Subject: [PATCH 3/3] tests --- ring_buffer/ring_buffer.hpp | 12 ++++---- ring_buffer/tests/ring_buffer_tests.cpp | 40 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/ring_buffer/ring_buffer.hpp b/ring_buffer/ring_buffer.hpp index ce09c6c..e3ead70 100644 --- a/ring_buffer/ring_buffer.hpp +++ b/ring_buffer/ring_buffer.hpp @@ -2,7 +2,7 @@ #include -namespace CONTAINERS { +namespace Containers { template class ring_buffer { size_t size_; @@ -10,7 +10,7 @@ template class ring_buffer { std::vector data_; public: - ring_buffer(size_t sz) { data_.reserve(sz); } + ring_buffer(size_t sz) : size_{0}, begin_{0}, end_{0} { data_.reserve(sz); } size_t size() const { return size_; } size_t capacity() const { return data_.capacity(); } @@ -26,7 +26,7 @@ template class ring_buffer { bool push(const T &elem) { if (is_full()) return false; - data_[end_++] = T; + data_[end_++] = elem; end_ %= capacity(); ++size_; return true; @@ -34,11 +34,11 @@ template class ring_buffer { bool pop() { if (is_empty()) return false; - ++begin; - begin %= capacity; + ++begin_; + begin_ %= capacity(); --size_; return true; } }; -} // namespace CONTAINERS +} // namespace Containers diff --git a/ring_buffer/tests/ring_buffer_tests.cpp b/ring_buffer/tests/ring_buffer_tests.cpp index e69de29..0cc047b 100644 --- a/ring_buffer/tests/ring_buffer_tests.cpp +++ b/ring_buffer/tests/ring_buffer_tests.cpp @@ -0,0 +1,40 @@ +#include "ring_buffer.hpp" +#include + +TEST(RingBuffer, constructor) { + const size_t sz = 3; + Containers::ring_buffer rb{sz}; + EXPECT_EQ(rb.size(), 0); + EXPECT_EQ(rb.capacity(), sz); +} + +TEST(RingBuffer, push) { + const size_t sz = 2; + Containers::ring_buffer rb{sz}; + + EXPECT_TRUE(rb.push(10)); + EXPECT_EQ(rb.size(), 1); + + EXPECT_TRUE(rb.push(20)); + EXPECT_EQ(rb.size(), 2); + + EXPECT_FALSE(rb.push(30)); + EXPECT_EQ(rb.size(), 2); +} + +TEST(RingBuffer, pop) { + const size_t sz = 2; + Containers::ring_buffer rb{sz}; + + EXPECT_TRUE(rb.push(10)); + EXPECT_TRUE(rb.push(20)); + EXPECT_EQ(rb.size(), 2); + + EXPECT_TRUE(rb.pop()); + EXPECT_EQ(rb.size(), 1); + + EXPECT_TRUE(rb.pop()); + EXPECT_EQ(rb.size(), 0); + + EXPECT_FALSE(rb.pop()); +}