Skip to content

Commit

Permalink
Fixes & dynamic selectors for lookups
Browse files Browse the repository at this point in the history
  • Loading branch information
ayashunsky authored and akokoshn committed Nov 1, 2024
1 parent 3d9ca38 commit 0780f3f
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions crypto3/libs/blueprint/include/nil/blueprint/bbf/generic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,13 @@ namespace nil {
TYPE relativize(TYPE C, int32_t shift) {
return expression_relativize_visitor<var>::relativize(C, shift);
}
std::vector<TYPE> relativize(std::vector<TYPE> C, int32_t shift) {
std::vector<TYPE> res;
for(TYPE c_part : C) {
res.push_back(expression_relativize_visitor<var>::relativize(c_part,shift));
}
return res;
}

void constrain(TYPE C, std::string constraint_name) {
if (!is_absolute(C)) {
Expand All @@ -639,13 +646,14 @@ namespace nil {
add_constraint(C_rel, row);
}

void relative_constrain(TYPE C_rel, std::size_t row) { // accesible only at GenerationStage::CONSTRAINTS !
// accesible only at GenerationStage::CONSTRAINTS !
void relative_constrain(TYPE C_rel, std::size_t row) {
if (!is_relative(C_rel)) {
std::stringstream ss;
ss << "Constraint " << C_rel << " has absolute variables, cannot constrain.";
throw std::logic_error(ss.str());
}
add_constraint(C_rel, row);
add_constraint(C_rel, get_row(row));
}

// accesible only at GenerationStage::CONSTRAINTS !
Expand Down Expand Up @@ -841,17 +849,21 @@ namespace nil {
void add_constraint(TYPE &C_rel, std::size_t row) {
std::size_t stored_row = row - (is_fresh ? row_shift : 0);
constraint_id_type C_id = constraint_id_type(C_rel);
if (constraints->find(C_id) == constraints->end()) {
constraints->insert({C_id, {C_rel, row_selector<>(desc.rows_amount)}});
if (constraints->find(C_id) != constraints->end()) {
constraints->at(C_id).second.insert(stored_row);
} else {
constraints->insert({C_id, {C_rel, {stored_row}}});
}
constraints->at(C_id).second.set_row(stored_row);
}

void add_lookup_constraint(std::string table_name, std::vector<TYPE> &C_rel, std::size_t row) {
std::size_t stored_row = row - (is_fresh ? row_shift : 0);
constraint_id_type C_id = constraint_id_type(C_rel);
if (lookup_constraints->find({table_name,C_id}) == lookup_constraints->end()) {
lookup_constraints->insert({{table_name,C_id}, {C_rel, row_selector<>(desc.rows_amount)}});
if (lookup_constraints->find({table_name,C_id}) != lookup_constraints->end()) {
lookup_constraints->at({table_name,C_id}).second.insert(stored_row);
} else {
lookup_constraints->insert({{table_name,C_id}, {C_rel, {stored_row}}});
}
lookup_constraints->at({table_name,C_id}).second.set_row(stored_row);
}
Expand Down

0 comments on commit 0780f3f

Please sign in to comment.