66 void allocate(uint32_t inputCap, uint32_t outputCap,
size_t capacityCycles);
78 void write(uint64_t timestampNs,
int wkc, std::span<const uint8_t> inputs,
79 std::span<const uint8_t> outputs);
83 uint64_t
head()
const {
return head_.load(std::memory_order_acquire); }
97 bool readRecord(uint64_t seq, Record& out)
const;
103 static constexpr size_t kHeaderBytes = 20;
105 std::vector<uint8_t> buffer_;
106 std::vector<std::atomic<uint64_t>>
109 size_t capacity_ = 0;
110 uint32_t inputCap_ = 0;
111 uint32_t outputCap_ = 0;
112 std::atomic<uint64_t> head_{0};
113 bool locked_ =
false;
A lock-free circular recorder of the raw process image, one record per RT cycle.
Definition process_data_ring.h:34
void allocate(uint32_t inputCap, uint32_t outputCap, size_t capacityCycles)
(Re)allocates the ring for an image of inputCap / outputCap bytes per direction and capacity cycles,...
Definition process_data_ring.cc:24
void clear()
Releases the storage and resets to the unallocated state. Idempotent.
Definition process_data_ring.cc:53
~ProcessDataRing()
Definition process_data_ring.cc:22
bool allocated() const
Whether allocate has been called with a non-zero capacity.
Definition process_data_ring.h:72
size_t capacity() const
Number of cycles the ring can hold.
Definition process_data_ring.h:86
ProcessDataRing(const ProcessDataRing &)=delete
uint64_t head() const
The producer's next sequence number; head()-1 is the newest recorded cycle, and head()==0 means nothi...
Definition process_data_ring.h:83
bool readRecord(uint64_t seq, Record &out) const
Copies the record for seq into out. Lock-free; retries are the caller's job.
Definition process_data_ring.cc:113
void write(uint64_t timestampNs, int wkc, std::span< const uint8_t > inputs, std::span< const uint8_t > outputs)
Records one cycle. RT, wait-free, single-writer. No-op until allocate.
Definition process_data_ring.cc:79
ProcessDataRing & operator=(const ProcessDataRing &)=delete
ProcessDataRing()=default
uint64_t oldestValidSeq() const
The oldest sequence number still in the ring: max(0, head - capacity). A cursor below this has been l...
Definition process_data_ring.cc:108
Definition http_server.h:16
One recorded cycle, copied out by a reader. inputs / outputs are the raw IOmap bytes for that cycle (...
Definition process_data_ring.h:38
std::vector< uint8_t > outputs
Definition process_data_ring.h:49
int32_t wkc
Working counter for the cycle.
Definition process_data_ring.h:47
uint64_t timestampNs
Definition process_data_ring.h:46
uint64_t seq
Absolute cycle sequence number.
Definition process_data_ring.h:39
std::vector< uint8_t > inputs
Definition process_data_ring.h:48