Skip to main content

chronon::sender::VersionedRegister

Lock-free ring buffer of (value, cycle) versions for lookahead-safe shared state. More...

#include <VersionedRegister.hpp>

Public Functions

Name
voidwrite(T value, uint64_t write_cycle)
voidreset(T value =T{})
TreadLatest() const
Tread(uint64_t reader_cycle) const
VersionedRegister &operator=(const VersionedRegister & other)
VersionedRegister &operator=(VersionedRegister && ) =default
uint32_tdepth() const
VersionedRegister()
VersionedRegister(T initial_value, uint32_t depth =kDefaultDepth)
VersionedRegister()
VersionedRegister(T initial_value)
VersionedRegister(const VersionedRegister & other)
VersionedRegister(VersionedRegister && ) =default

Public Attributes

Name
uint32_tkDefaultDepth

Detailed Description

template <typename T ,
size_t HistoryDepth =0>
class chronon::sender::VersionedRegister;

Lock-free ring buffer of (value, cycle) versions for lookahead-safe shared state.

Template Parameters:

  • T Value type.
  • HistoryDepth Compile-time depth. 0 (default) selects the new runtime-depth API; any positive value selects the deprecated fixed-depth API.

In parallel lookahead execution, units advance at different simulation cycles. A reader at cycle N must not observe writes made at cycle N+K. write() appends; read(cycle) returns the newest version with write_cycle <= reader_cycle. Single-writer/multi-reader safe via acquire/release on write_head_; multiple writers require external serialization.

Preferred usage (runtime depth derived from the dependency graph):

auto depth = sim.dependencyGraph()
.requiredVersionedRegisterDepth(writer, readers, max_lookahead);
VersionedRegister<uint64_t> reg(initial_value, depth);

Legacy usage (compile-time depth, deprecated):

VersionedRegister<uint64_t, 16> reg(initial_value); // deprecated

Public Functions Documentation

function write

inline void write(
T value,
uint64_t write_cycle
)

function reset

inline void reset(
T value =T{}
)

function readLatest

inline T readLatest() const

function read

inline T read(
uint64_t reader_cycle
) const

function operator=

inline VersionedRegister & operator=(
const VersionedRegister & other
)

function operator=

VersionedRegister & operator=(
VersionedRegister &&
) =default

function depth

inline uint32_t depth() const

function VersionedRegister

inline VersionedRegister()

function VersionedRegister

inline VersionedRegister(
T initial_value,
uint32_t depth =kDefaultDepth
)

function VersionedRegister

inline VersionedRegister()

function VersionedRegister

inline explicit VersionedRegister(
T initial_value
)

function VersionedRegister

inline VersionedRegister(
const VersionedRegister & other
)

function VersionedRegister

VersionedRegister(
VersionedRegister &&
) =default

Public Attributes Documentation

variable kDefaultDepth

static uint32_t kDefaultDepth = 16;

Updated on 2026-07-06 at 09:03:33 +0000