Implemented simple IO for getting keyboard input.
This commit is contained in:
44
targets/_any/include/os/tools/ringbuffer.hpp
Normal file
44
targets/_any/include/os/tools/ringbuffer.hpp
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#if !defined(BAD_APPLE_OS_OS_TOOLS_RINGBUFFER_HPP_INCLUDED)
|
||||
#define BAD_APPLE_OS_OS_TOOLS_RINGBUFFER_HPP_INCLUDED
|
||||
|
||||
#include <array>
|
||||
#include <cstddef>
|
||||
|
||||
namespace baos
|
||||
{
|
||||
template<typename T, std::size_t SIZE>
|
||||
class RingBuffer
|
||||
{
|
||||
private:
|
||||
std::array<T, SIZE> mElements;
|
||||
std::size_t mBufferedElements = 0;
|
||||
std::size_t mPosition = 0;
|
||||
public:
|
||||
[[nodiscard]] bool full() const noexcept { return mBufferedElements == SIZE; }
|
||||
[[nodiscard]] bool empty() const noexcept { return mBufferedElements == 0; }
|
||||
bool append(T element) noexcept
|
||||
{
|
||||
if (full()) {
|
||||
return false;
|
||||
}
|
||||
mElements[mPosition] = std::move(element);
|
||||
++mBufferedElements;
|
||||
mPosition = (mPosition + 1) % SIZE;
|
||||
return true;
|
||||
}
|
||||
bool next(T& outElement) noexcept
|
||||
{
|
||||
if (empty()) {
|
||||
return false;
|
||||
}
|
||||
outElement = std::move(mElements[(mPosition + SIZE - mBufferedElements) % SIZE]);
|
||||
--mBufferedElements;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#endif // !defined(BAD_APPLE_OS_OS_TOOLS_RINGBUFFER_HPP_INCLUDED)
|
||||
Reference in New Issue
Block a user