9#include "../circuit_builders/circuit_builders.hpp"
23template <IsUltraOrMegaBuilder Builder>
25 : raw_entries(table_entries)
26 ,
length(raw_entries.size())
34 for (
size_t i = 0; i <
length; ++i) {
47template <IsUltraOrMegaBuilder Builder>
49 : raw_entries(table_entries)
50 ,
length(raw_entries.size())
53 for (
const auto& entry : table_entries) {
54 if (entry.get_context() !=
nullptr) {
67 for (
size_t i = 0; i <
length; ++i) {
87 for (
const auto& entry : raw_entries) {
88 if (entry.is_constant()) {
91 fixed_witness.set_origin_tag(entry.get_origin_tag());
92 entries.emplace_back(fixed_witness);
95 entries.emplace_back(entry);
100 for (
size_t i = 0; i <
length; ++i) {
101 context->set_ROM_element(rom_id, i, entries[i].get_witness_index());
105 _tags.resize(raw_entries.size());
106 for (
size_t i = 0; i <
length; ++i) {
107 _tags[i] = raw_entries[i].get_origin_tag();
114template <IsUltraOrMegaBuilder Builder>
122 context->failure(
"rom_rable: ROM array access out of bounds");
125 return entries[
index];
135 "rom_table: Performing a read operation without providing a context. We cannot initialize the table.");
141 if (
index.is_constant()) {
146 if (native_index >=
length) {
147 context->failure(
"rom_table: ROM array access out of bounds");
150 uint32_t output_idx =
context->read_ROM_array(rom_id,
index.get_witness_index());
153 const size_t cast_index =
static_cast<size_t>(
static_cast<uint64_t
>(native_index));
156 if (native_index <
length) {
158 element.set_origin_tag(_tags[cast_index]);
#define BB_ASSERT(expression,...)
#define BB_ASSERT_NEQ(actual, expected,...)
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
Builder * get_context() const
std::vector< OriginTag > _tags
void initialize_table() const
Initialize the table once we perform a read.
rom_table & operator=(const rom_table &other)
std::vector< field_pt > raw_entries
field_pt operator[](const size_t index) const
StrictMock< MockContext > context
uint8_t const size_t length
std::conditional_t< IsGoblinBigGroup< C, Fq, Fr, G >, element_goblin::goblin_element< C, goblin_field< C >, Fr, G >, element_default::element< C, Fq, Fr, G > > element
element wraps either element_default::element or element_goblin::goblin_element depending on parametr...
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept