From 118faa538004b903ea09836f7f860096545aa61a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Thu, 1 May 2025 12:16:30 -0700 Subject: [PATCH] FHU: Add a non-block thread local ringbuffer I keep rewriting this thing when I want to see some history on something. Throw it in a FHU utility so I can stop wasting my time. --- FEXHeaderUtils/FEXHeaderUtils/RingBuffer.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 FEXHeaderUtils/FEXHeaderUtils/RingBuffer.h diff --git a/FEXHeaderUtils/FEXHeaderUtils/RingBuffer.h b/FEXHeaderUtils/FEXHeaderUtils/RingBuffer.h new file mode 100644 index 000000000..2e171ea6f --- /dev/null +++ b/FEXHeaderUtils/FEXHeaderUtils/RingBuffer.h @@ -0,0 +1,21 @@ +#pragma once +#include +#include + +namespace FHU { +// This is a fast thread-local non-blocking ring-buffer. +// Very useful for debugging purposes to see the history of something. +template +requires (std::has_single_bit(Elements) && std::is_trivially_copyable_v) +class [[deprecated("Not for production use")]] NonBlockRingBuffer final { +public: + void emplace(T Val) { + Ring[Current] = Val; + Current = (Current + 1) & (Elements - 1); + } + +private: + T Ring[Elements] {}; + size_t Current {}; +}; +} // namespace FHU