add crete to ring buffer

This commit is contained in:
2025-03-18 12:44:52 +03:00
parent 709d2ce3df
commit 8076ef608a
2 changed files with 14 additions and 5 deletions

View File

@@ -12,7 +12,8 @@ auto main(int argc, char *argv[]) -> int
{ {
// patterns::ring_buffer // patterns::ring_buffer
{ {
hack::patterns::ring_buffer<int> rb(10); hack::patterns::ring_buffer<int> rb;
rb.create(10);
for (int i = 0; i < 10; ++i) rb.put(i); for (int i = 0; i < 10; ++i) rb.put(i);
hack::log()(rb); hack::log()(rb);
hack::log()(rb.size()); hack::log()(rb.size());

View File

@@ -15,6 +15,7 @@ namespace hack::patterns
using MUTEX = std::lock_guard<std::recursive_mutex>; using MUTEX = std::lock_guard<std::recursive_mutex>;
public: public:
ring_buffer() = default;
explicit ring_buffer(int s) explicit ring_buffer(int s)
{ {
m_size = s; m_size = s;
@@ -22,6 +23,13 @@ namespace hack::patterns
}; };
public: public:
void create(int s)
{
if (m_size > 0) return;
m_size = s;
m_data.resize(m_size);
}
void put(T item) noexcept void put(T item) noexcept
{ {
MUTEX lock(m_mutex); MUTEX lock(m_mutex);
@@ -135,10 +143,10 @@ namespace hack::patterns
} }
private: private:
std::size_t m_head{ 0 }; std::size_t m_head = 0;
std::size_t m_tail{ 0 }; std::size_t m_tail = 0;
std::size_t m_size; std::size_t m_size = 0;
bool m_full{ false }; bool m_full = false;
private: private:
mutable std::recursive_mutex m_mutex; mutable std::recursive_mutex m_mutex;