barretenberg
Loading...
Searching...
No Matches
ram_table.hpp
1#pragma once
2#include "../circuit_builders/circuit_builders_fwd.hpp"
3#include "../field/field.hpp"
4
5namespace proof_system::plonk {
6namespace stdlib {
7
8// A runtime-defined read-only memory table. Table entries must be initialized in the constructor.
9// N.B. Only works with the UltraPlonkBuilder at the moment!
10template <typename Builder> class ram_table {
11 private:
13
14 public:
15 ram_table() {}
16 ram_table(Builder* builder, const size_t table_size);
17 ram_table(const std::vector<field_pt>& table_entries);
18 ram_table(const ram_table& other);
19 ram_table(ram_table&& other);
20
21 void initialize_table() const;
22
23 ram_table& operator=(const ram_table& other);
25
26 field_pt read(const field_pt& index) const;
27
28 void write(const field_pt& index, const field_pt& value);
29
30 size_t size() const { return _length; }
31
32 Builder* get_context() const { return _context; }
33
34 bool check_indices_initialized() const
35 {
36 if (_all_entries_written_to_with_constant_index) {
37 return true;
38 }
39 if (_length == 0) {
40 return false;
41 }
42 bool init = true;
43 for (auto i : _index_initialized) {
44 init = init && i;
45 }
46 _all_entries_written_to_with_constant_index = init;
47 return _all_entries_written_to_with_constant_index;
48 }
49
50 private:
51 std::vector<field_pt> _raw_entries;
52 mutable std::vector<bool> _index_initialized;
53 size_t _length = 0;
54 mutable size_t _ram_id = 0; // Builder identifier for this ROM table
55 mutable bool _ram_table_generated_in_builder = false;
56 mutable bool _all_entries_written_to_with_constant_index = false;
57 mutable Builder* _context = nullptr;
58};
59
60EXTERN_STDLIB_ULTRA_TYPE(ram_table);
61
62} // namespace stdlib
63} // namespace proof_system::plonk
Definition: standard_circuit_builder.hpp:12
Definition: field.hpp:10
Definition: ram_table.hpp:10
void initialize_table() const
internal method, is used to call Builder methods that will generate RAM table.
Definition: ram_table.cpp:67
field_pt read(const field_pt &index) const
Read a field element from the RAM table at an index value.
Definition: ram_table.cpp:175
ram_table & operator=(const ram_table &other)
Copy assignment operator.
Definition: ram_table.cpp:136
void write(const field_pt &index, const field_pt &value)
Write a field element from the RAM table at an index value.
Definition: ram_table.cpp:212
Definition: widget.bench.cpp:13