Add SpMcRingBuffer to base class StimulusBuffer
This will hopefully genericise the interface for Stimbuffs.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user