Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
trace_conversion.cpp
Go to the documentation of this file.
2
3#include <unordered_map>
4#include <unordered_set>
5
8
9namespace bb::avm2::tracegen {
10
12{
13 static std::unordered_set<ColumnAndShifts> shifted_columns = []() {
15 for (const auto& col : SHIFTED_COLUMNS_ARRAY) {
16 shifted_columns.insert(col);
17 }
18 return shifted_columns;
19 }();
20 return shifted_columns.contains(c);
21}
22
24{
27 for (size_t i = 0; i < TO_BE_SHIFTED_COLUMNS_ARRAY.size(); ++i) {
29 }
30 return shifts;
31 }();
32
33 auto it = shifts.find(c);
34 return it == shifts.end() ? std::nullopt : std::make_optional(it->second);
35}
36
38{
39 static std::unordered_map<ColumnAndShifts, Column> unshifts = []() {
41 for (size_t i = 0; i < TO_BE_SHIFTED_COLUMNS_ARRAY.size(); ++i) {
43 }
44 return unshifts;
45 }();
46
47 auto it = unshifts.find(c);
48 return it == unshifts.end() ? std::nullopt : std::make_optional(it->second);
49}
50
52{
53 AvmFullRow full_row;
54 // Write unshifted columns.
55 for (size_t col = 0; col < trace.num_columns(); ++col) {
56 full_row.get(static_cast<ColumnAndShifts>(col)) = trace.get(static_cast<Column>(col), row);
57 }
58 // Write the shifted values.
59 for (const auto& col : TO_BE_SHIFTED_COLUMNS_ARRAY) {
60 auto value = trace.get(static_cast<Column>(col), row + 1);
61 auto shifted = shift_column(col);
62 full_row.get(shifted.value()) = value;
63 }
64 return full_row;
65}
66
68{
69 return [&]<size_t... Is>(std::index_sequence<Is...>) {
70 return AvmFullRowConstRef{ trace.get_column_or_shift(static_cast<ColumnAndShifts>(Is), row)... };
72}
73
74} // namespace bb::avm2::tracegen
static constexpr size_t num_columns()
const FF & get(Column col, uint32_t row) const
const FF & get_column_or_shift(ColumnAndShifts col, uint32_t row) const
TestTraceContainer trace
std::optional< ColumnAndShifts > shift_column(Column c)
AvmFullRow get_full_row(const TraceContainer &trace, uint32_t row)
bool is_shift(ColumnAndShifts c)
std::optional< Column > unshift_column(ColumnAndShifts c)
AvmFullRowConstRef get_full_row_ref(const TraceContainer &trace, uint32_t row)
constexpr auto SHIFTED_COLUMNS_ARRAY
Definition columns.hpp:43
constexpr auto TO_BE_SHIFTED_COLUMNS_ARRAY
Definition columns.hpp:42
ColumnAndShifts
Definition columns.hpp:35
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
FF & get(ColumnAndShifts col)
Definition full_row.cpp:7