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 <array>
4#include <cstddef>
5#include <utility>
6
10
11namespace bb::avm2::tracegen {
12
14{
15 static unordered_flat_set<ColumnAndShifts> shifted_columns = []() {
17 for (const auto& col : SHIFTED_COLUMNS_ARRAY) {
18 shifted_columns.insert(col);
19 }
20 return shifted_columns;
21 }();
22 return shifted_columns.contains(c);
23}
24
26{
29 for (size_t i = 0; i < TO_BE_SHIFTED_COLUMNS_ARRAY.size(); ++i) {
31 }
32 return shifts;
33 }();
34
35 auto it = shifts.find(c);
36 return it == shifts.end() ? std::nullopt : std::make_optional(it->second);
37}
38
40{
41 static unordered_flat_map<ColumnAndShifts, Column> unshifts = []() {
43 for (size_t i = 0; i < TO_BE_SHIFTED_COLUMNS_ARRAY.size(); ++i) {
45 }
46 return unshifts;
47 }();
48
49 auto it = unshifts.find(c);
50 return it == unshifts.end() ? std::nullopt : std::make_optional(it->second);
51}
52
53AvmFullRow get_full_row(const TraceContainer& trace, uint32_t row)
54{
55 AvmFullRow full_row;
56 // Write unshifted columns.
57 for (size_t col = 0; col < TraceContainer::num_columns(); ++col) {
58 full_row.get(static_cast<ColumnAndShifts>(col)) = trace.get(static_cast<Column>(col), row);
59 }
60 // Write the shifted values.
61 for (const auto& col : TO_BE_SHIFTED_COLUMNS_ARRAY) {
62 auto value = trace.get(static_cast<Column>(col), row + 1);
63 auto shifted = shift_column(col);
64 full_row.get(shifted.value()) = value;
65 }
66 return full_row;
67}
68
70{
71 return [&]<size_t... Is>(std::index_sequence<Is...>) {
72 return AvmFullRowConstRef{ trace.get_column_or_shift(static_cast<ColumnAndShifts>(Is), row)... };
74}
75
76} // 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)
::ankerl::unordered_dense::set< Key > unordered_flat_set
Definition set.hpp:11
ColumnAndShifts
Definition columns.hpp:35
constexpr auto SHIFTED_COLUMNS_ARRAY
Definition columns.hpp:79
constexpr auto TO_BE_SHIFTED_COLUMNS_ARRAY
Definition columns.hpp:78
::ankerl::unordered_dense::map< Key, T > unordered_flat_map
Definition map.hpp:15
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
FF & get(ColumnAndShifts col)
Definition full_row.cpp:23