diff --git a/bin/main.cpp b/bin/main.cpp index 7608b25..d51b71f 100644 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -12,7 +12,8 @@ auto main(int argc, char *argv[]) -> int { // patterns::ring_buffer { - hack::patterns::ring_buffer rb(10); + hack::patterns::ring_buffer rb; + rb.create(10); for (int i = 0; i < 10; ++i) rb.put(i); hack::log()(rb); hack::log()(rb.size()); diff --git a/src/hack/patterns/ring_buffer.hpp b/src/hack/patterns/ring_buffer.hpp index 3393bea..f7fefba 100644 --- a/src/hack/patterns/ring_buffer.hpp +++ b/src/hack/patterns/ring_buffer.hpp @@ -15,6 +15,7 @@ namespace hack::patterns using MUTEX = std::lock_guard; public: + ring_buffer() = default; explicit ring_buffer(int s) { m_size = s; @@ -22,6 +23,13 @@ namespace hack::patterns }; public: + void create(int s) + { + if (m_size > 0) return; + m_size = s; + m_data.resize(m_size); + } + void put(T item) noexcept { MUTEX lock(m_mutex); @@ -135,10 +143,10 @@ namespace hack::patterns } private: - std::size_t m_head{ 0 }; - std::size_t m_tail{ 0 }; - std::size_t m_size; - bool m_full{ false }; + std::size_t m_head = 0; + std::size_t m_tail = 0; + std::size_t m_size = 0; + bool m_full = false; private: mutable std::recursive_mutex m_mutex;