58 using Pick = std::function<size_t(std::span<const double> row)>;
73 explicit WalkOperator(std::shared_ptr<Kinesis::Stochastic::Weights> table,
Pick pick = {},
74 uint32_t every_n_blocks = 0,
size_t starting_index = 0);
88 void jump(
size_t index);
90 [[nodiscard]]
size_t current() const noexcept {
return m_current.load(std::memory_order_relaxed); }
91 [[nodiscard]]
const std::shared_ptr<Kinesis::Stochastic::Weights>&
table() const noexcept {
return m_table; }
108 void process(
float frames)
override;
120 void set_every_n_blocks(uint32_t every_n_blocks)
noexcept;
122 void set_parameter(std::string_view param,
double value)
override;
128 [[nodiscard]] std::optional<double> query_state(std::string_view query)
const override;
130 [[nodiscard]] std::string_view
get_type_name()
const override {
return "Walk"; }
138 void ensure_established();
140 std::shared_ptr<Kinesis::Stochastic::Weights>
m_table;
143 std::atomic<size_t> m_current { 0 };
144 std::atomic<uint32_t> m_every_n_blocks { 0 };
145 uint32_t m_blocks_until { 0 };
146 bool m_established {
false };