9#include "../circuit_builders/circuit_builders.hpp"
16template <
typename Builder>
18 : raw_entries(table_entries)
19 ,
length(raw_entries.size())
23 for (
const auto& entry : table_entries) {
24 if (entry[0].get_context() !=
nullptr) {
25 context = entry[0].get_context();
28 if (entry[1].get_context() !=
nullptr) {
29 context = entry[1].get_context();
41 for (
size_t i = 0; i <
length; ++i) {
42 _tags[i] = { raw_entries[i][0].get_origin_tag(), raw_entries[i][1].get_origin_tag() };
55 BB_ASSERT_EQ(
context !=
nullptr,
true,
"twin_rom_table: context must be set before initializing the table");
58 for (
const auto& entry : raw_entries) {
61 if (entry[0].is_constant()) {
66 if (entry[1].is_constant()) {
77 for (
size_t i = 0; i <
length; ++i) {
79 rom_id, i, std::array<uint32_t, 2>{ entries[i][0].get_witness_index(), entries[i][1].get_witness_index() });
84 for (
size_t i = 0; i <
length; ++i) {
85 _tags[i] = { raw_entries[i][0].
get_origin_tag(), raw_entries[i][1].get_origin_tag() };
92template <
typename Builder>
94template <
typename Builder>
97template <
typename Builder>
102 context->failure(
"twin_rom_table: ROM array access out of bounds");
105 return entries[
index];
108template <
typename Builder>
111 if (
index.is_constant()) {
120 context->failure(
"twin_rom_table: ROM array access out of bounds");
123 auto output_indices =
context->read_ROM_array_pair(rom_id,
index.get_witness_index());
130 const size_t cast_index =
static_cast<size_t>(
static_cast<uint64_t
>(native_index));
132 if (native_index <
length) {
133 pair[0].set_origin_tag(_tags[cast_index][0]);
134 pair[1].set_origin_tag(_tags[cast_index][1]);
#define BB_ASSERT(expression,...)
#define BB_ASSERT_EQ(actual, expected,...)
static field_t from_witness_index(Builder *ctx, uint32_t witness_index)
OriginTag get_origin_tag() const
std::array< field_pt, 2 > field_pair_pt
Contains all the headers required to adequately compile the types defined in circuit_builders_fwd....
StrictMock< MockContext > context
uint8_t const size_t length
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept