Add SpMcRingBuffer to base class StimulusBuffer

This will hopefully genericise the interface for Stimbuffs.
This commit is contained in:
2025-11-01 00:06:42 -04:00
parent 5af7e531b6
commit cdade17905
4 changed files with 29 additions and 5 deletions
+7 -4
View File
@@ -2,6 +2,7 @@
#define _SP_MC_RING_BUFFER_H
#include <vector>
#include <memory>
#include <cstddef>
#include <stdexcept>
#include <algorithm>
@@ -44,8 +45,8 @@ public:
* locks array.
*/
explicit SpMcRingBuffer(
const InputEngineConstraints& constraints_,
size_t nSlots_)
size_t nSlots_,
const InputEngineConstraints& constraints_)
: nSlots(nSlots_), strideNBytes(0), bufferNBytes(0),
constraints(constraints_)
{
@@ -59,7 +60,8 @@ public:
// Allocate data buffer: bufferNBytes (aligned up to alignment)
data.resize(bufferNBytes);
// Initialize sequence locks array: one lock per slot
sequenceLocks.resize(nSlots);
// Use unique_ptr array since SequenceLock is not copyable or movable
sequenceLocks = std::make_unique<SequenceLock[]>(nSlots);
}
~SpMcRingBuffer() = default;
@@ -121,7 +123,8 @@ private:
std::vector<uint8_t> data;
// Sequence locks array: one lock per slot
std::vector<SequenceLock> sequenceLocks;
// Use unique_ptr array since SequenceLock is not copyable or movable
std::unique_ptr<SequenceLock[]> sequenceLocks;
public:
// Layout/invariants