Skip to content

Commit e5e1ff4

Browse files
author
Lukasz A.J. Wrona
committed
static index_set functions
1 parent 65ad3db commit e5e1ff4

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

src/solvers/refinement/string_refinement.cpp

+31-8
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ static std::pair<bool, std::vector<exprt>> check_axioms(
7171
ui_message_handlert::uit ui,
7272
const replace_mapt& symbol_resolve);
7373

74+
static void initial_index_set(
75+
std::map<exprt, std::set<exprt>> &index_set,
76+
std::map<exprt, std::set<exprt>> &current_index_set,
77+
const namespacet &ns,
78+
const string_constraintt &axiom);
79+
80+
static void initial_index_set(
81+
std::map<exprt, std::set<exprt>> &index_set,
82+
std::map<exprt, std::set<exprt>> &current_index_set,
83+
const namespacet &ns,
84+
const std::vector<string_constraintt> &string_axioms);
85+
7486
exprt simplify_sum(const exprt &f);
7587

7688
/// Convert exprt to a specific type. Throw bad_cast if conversion
@@ -669,7 +681,7 @@ decision_proceduret::resultt string_refinementt::dec_solve()
669681
}
670682
}
671683

672-
initial_index_set(universal_axioms);
684+
initial_index_set(index_set, current_index_set, ns, universal_axioms);
673685
update_index_set(cur);
674686
cur.clear();
675687
for (const auto& lemma :
@@ -1602,11 +1614,14 @@ static bool find_qvar(const exprt index, const symbol_exprt &qvar)
16021614
/// add to the index set all the indices that appear in the formulas and the
16031615
/// upper bound minus one
16041616
/// \par parameters: a list of string constraints
1605-
void string_refinementt::initial_index_set(
1617+
static void initial_index_set(
1618+
std::map<exprt, std::set<exprt>> &index_set,
1619+
std::map<exprt, std::set<exprt>> &current_index_set,
1620+
const namespacet &ns,
16061621
const std::vector<string_constraintt> &string_axioms)
16071622
{
16081623
for(const auto &axiom : string_axioms)
1609-
initial_index_set(axiom);
1624+
initial_index_set(index_set, current_index_set, ns, axiom);
16101625
}
16111626

16121627
/// add to the index set all the indices that appear in the formulas
@@ -1644,7 +1659,11 @@ static std::vector<exprt> sub_arrays(const exprt &array_expr)
16441659
/// add to the index set all the indices that appear in the formula and the
16451660
/// upper bound minus one
16461661
/// \par parameters: a string constraint
1647-
void string_refinementt::add_to_index_set(const exprt &s, exprt i)
1662+
static void add_to_index_set(
1663+
std::map<exprt, std::set<exprt>> &index_set,
1664+
std::map<exprt, std::set<exprt>> &current_index_set,
1665+
const namespacet &ns,
1666+
const exprt &s, exprt i)
16481667
{
16491668
simplify(i, ns);
16501669
if(i.id()!=ID_constant || expr_cast<size_t>(i))
@@ -1655,7 +1674,11 @@ void string_refinementt::add_to_index_set(const exprt &s, exprt i)
16551674
}
16561675
}
16571676

1658-
void string_refinementt::initial_index_set(const string_constraintt &axiom)
1677+
static void initial_index_set(
1678+
std::map<exprt, std::set<exprt>> &index_set,
1679+
std::map<exprt, std::set<exprt>> &current_index_set,
1680+
const namespacet &ns,
1681+
const string_constraintt &axiom)
16591682
{
16601683
symbol_exprt qvar=axiom.univ_var();
16611684
std::list<exprt> to_process;
@@ -1675,7 +1698,7 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom)
16751698
// if cur is of the form s[i] and no quantified variable appears in i
16761699
if(!has_quant_var)
16771700
{
1678-
add_to_index_set(s, i);
1701+
add_to_index_set(index_set, current_index_set, ns, s, i);
16791702
}
16801703
else
16811704
{
@@ -1685,7 +1708,7 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom)
16851708
axiom.upper_bound(),
16861709
from_integer(1, axiom.upper_bound().type()));
16871710
replace_expr(qvar, kminus1, e);
1688-
add_to_index_set(s, e);
1711+
add_to_index_set(index_set, current_index_set, ns, s, e);
16891712
}
16901713
}
16911714
else
@@ -1713,7 +1736,7 @@ void string_refinementt::update_index_set(const exprt &formula)
17131736
s.type().id()==ID_array,
17141737
string_refinement_invariantt("index expressions must index on arrays"));
17151738
exprt simplified=simplify_sum(i);
1716-
add_to_index_set(s, simplified);
1739+
add_to_index_set(index_set, current_index_set, ns, s, simplified);
17171740
}
17181741
else
17191742
{

src/solvers/refinement/string_refinement.h

-3
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,6 @@ class string_refinementt final: public bv_refinementt
105105
void set_char_array_equality(const exprt &lhs, const exprt &rhs);
106106
void update_index_set(const exprt &formula);
107107
void update_index_set(const std::vector<exprt> &cur);
108-
void initial_index_set(const string_constraintt &axiom);
109-
void initial_index_set(const std::vector<string_constraintt> &string_axioms);
110-
void add_to_index_set(const exprt &s, exprt i);
111108

112109
std::vector<exprt> instantiate_not_contains(
113110
const string_not_contains_constraintt &axiom);

0 commit comments

Comments
 (0)