8#include "../circuit_builders/circuit_builders.hpp"
13template <
typename Builder>
18 for (
const auto& entry : entries_in) {
19 if (entry.get_context() !=
nullptr) {
28 for (
const auto& entry : entries_in) {
29 if (entry.is_constant()) {
30 auto const_var_idx =
context->put_constant_variable(entry.get_value());
33 entries.emplace_back(entry.normalize());
36 context->append_to_bus_vector(bus_idx, entries.back().get_witness_index());
41template <
typename Builder>
46 auto raw_index =
static_cast<size_t>(
uint256_t(index.get_value()).
data[0]);
48 context->failure(
"bus_vector: access out of bounds");
52 uint32_t index_witness_idx = 0;
53 if (index.is_constant()) {
54 index_witness_idx =
context->put_constant_variable(index.get_value());
56 index_witness_idx = index.normalize().get_witness_index();
60 uint32_t output_idx =
context->read_bus_vector(bus_idx, index_witness_idx);
#define ASSERT(expression,...)
field_pt operator[](const field_pt &index) const
Read from the bus vector with a witness index value. Creates a read gate.
void set_values(const std::vector< field_pt > &entries_in)
Set the entries of the bus vector from possibly unnormalized or constant inputs.
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
StrictMock< MockContext > context
uint8_t const size_t length
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept