mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
34 lines
663 B
C++
34 lines
663 B
C++
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
|
|
// SPDX-License-Identifier: GPL-3.0+
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <memory>
|
|
|
|
class RingBuffer
|
|
{
|
|
RingBuffer(const RingBuffer&) = delete;
|
|
RingBuffer& operator=(const RingBuffer&) = delete;
|
|
|
|
public:
|
|
RingBuffer();
|
|
RingBuffer(size_t capacity);
|
|
~RingBuffer();
|
|
|
|
void reset(size_t size);
|
|
size_t capacity() const;
|
|
size_t size() const;
|
|
|
|
// Overwrites old data if nbytes > size()
|
|
void write(const void* src, size_t nbytes);
|
|
size_t read(void* dst, size_t nbytes);
|
|
|
|
private:
|
|
std::unique_ptr<uint8_t[]> m_data;
|
|
size_t m_capacity = 0;
|
|
size_t m_rpos = 0;
|
|
size_t m_wpos = 0;
|
|
bool m_full = false;
|
|
};
|