add crete to ring buffer
This commit is contained in:
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user