9#include "../circuit_builders/circuit_builders.hpp"
16template <
typename Builder>
21 for (
const auto& entry : table_entries) {
22 if (entry[0].get_context() !=
nullptr) {
23 context = entry[0].get_context();
26 if (entry[1].get_context() !=
nullptr) {
27 context = entry[1].get_context();
31 raw_entries = table_entries;
32 length = raw_entries.size();
40 for (
size_t i = 0; i <
length; ++i) {
41 tags[i] = { raw_entries[i][0].get_origin_tag(), raw_entries[i][1].get_origin_tag() };
56 for (
const auto& entry : raw_entries) {
59 if (entry[0].is_constant()) {
64 if (entry[1].is_constant()) {
73 for (
size_t i = 0; i <
length; ++i) {
75 rom_id, i, std::array<uint32_t, 2>{ entries[i][0].get_witness_index(), entries[i][1].get_witness_index() });
80 for (
size_t i = 0; i <
length; ++i) {
81 tags[i] = { raw_entries[i][0].
get_origin_tag(), raw_entries[i][1].get_origin_tag() };
86template <
typename Builder>
88 : raw_entries(other.raw_entries)
89 , entries(other.entries)
92 , rom_id(other.rom_id)
93 , initialized(other.initialized)
97template <
typename Builder>
99 : raw_entries(other.raw_entries)
100 , entries(other.entries)
103 , rom_id(other.rom_id)
104 , initialized(other.initialized)
123 entries = other.entries;
126 rom_id = other.rom_id;
127 initialized = other.initialized;
132template <
typename Builder>
137 context->failure(
"twin_rom_table: ROM array access out of bounds");
140 return entries[index];
143template <
typename Builder>
155 context->failure(
"twin_rom_table: ROM array access out of bounds");
165 const size_t cast_index =
static_cast<size_t>(
static_cast<uint64_t
>(native_index));
167 if (native_index <
length) {
168 pair[0].set_origin_tag(tags[cast_index][0]);
169 pair[1].set_origin_tag(tags[cast_index][1]);
#define ASSERT(expression,...)
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
Builder * get_context() const
OriginTag get_origin_tag() const
bb::fr get_value() const
Given a := *this, compute its value given by a.v * a.mul + a.add.
field_t normalize() const
Return a new element, where the in-circuit witness contains the actual represented value (multiplicat...
uint32_t get_witness_index() const
Get the witness index of the current field element.
std::vector< field_pair_pt > entries
field_pair_pt operator[](const size_t index) const
std::vector< std::array< OriginTag, 2 > > tags
twin_rom_table & operator=(const twin_rom_table &other)
void initialize_table() const
std::array< field_pt, 2 > field_pair_pt
std::vector< field_pair_pt > raw_entries
Contains all the headers required to adequately compile the types defined in circuit_builders_fwd....
StrictMock< MockContext > context
uint8_t const size_t length
FF const & operator[](size_t idx) const
Retruns the element in beta_products at place #idx.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept