132 uint32_t dst_row = 0;
137 std::vector<uint32_t> src_rows_in_order;
138 src_rows_in_order.reserve(
trace.get_column_rows(LookupSettings::SRC_SELECTOR));
139 trace.visit_column(LookupSettings::SRC_SELECTOR,
140 [&](uint32_t row,
const FF&) { src_rows_in_order.push_back(row); });
141 std::sort(src_rows_in_order.begin(), src_rows_in_order.end());
143 for (uint32_t row : src_rows_in_order) {
144 auto src_values =
trace.get_multiple(LookupSettings::SRC_COLUMNS, row);
148 while (!found && dst_row < max_dst_row) {
152 if (dst_selector == 1 && src_values ==
trace.get_multiple(LookupSettings::DST_COLUMNS, dst_row)) {
153 trace.set(LookupSettings::COUNTS, dst_row,
trace.get(LookupSettings::COUNTS, dst_row) + 1);
157 trace.
get(LookupSettings::DST_SELECTOR, dst_row) != 1) {
158 trace.set(LookupSettings::DST_SELECTOR, dst_row, 1);
170 throw std::runtime_error(
171 "Failed computing counts for " + std::string(LookupSettings::NAME) +
172 ". Could not find tuple in destination.\nSRC tuple (row " +
std::to_string(row) +
174 "\nNOTE: Remember that you cannot use LookupIntoDynamicTableSequential with a deduplicated trace!");