Skip to content

Commit da6fa5d

Browse files
committed
Don't mutate parameters in numbering class
1 parent af31813 commit da6fa5d

File tree

4 files changed

+34
-30
lines changed

4 files changed

+34
-30
lines changed

src/analyses/invariant_set.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ bool inv_object_storet::get(const exprt &expr, unsigned &n)
5252
return false;
5353
}
5454

55-
return map.get_number(s, n);
55+
if(const auto number = map.get_number(s))
56+
{
57+
n = *number;
58+
return false;
59+
}
60+
return true;
5661
}
5762

5863
unsigned inv_object_storet::add(const exprt &expr)

src/solvers/flattening/boolbv_get.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,14 @@ exprt boolbvt::bv_get_unbounded_array(const exprt &expr) const
330330
valuest values;
331331

332332
{
333-
std::size_t number;
334-
335-
if(arrays.get_number(expr, number))
333+
const auto opt_num = arrays.get_number(expr);
334+
if(!opt_num)
335+
{
336336
return nil_exprt();
337+
}
337338

338339
// get root
339-
number=arrays.find_number(number);
340+
const auto number = arrays.find_number(*opt_num);
340341

341342
assert(number<index_map.size());
342343
index_mapt::const_iterator it=index_map.find(number);

src/util/numbering.h

+15-15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Author: Daniel Kroening, [email protected]
1616
#include <vector>
1717

1818
#include <util/invariant.h>
19+
#include <util/optional.h>
1920

2021
template <typename T>
2122
// NOLINTNEXTLINE(readability/identifiers)
@@ -60,15 +61,14 @@ class numbering final
6061
return number(a);
6162
}
6263

63-
bool get_number(const T &a, number_type &n) const
64+
optionalt<number_type> get_number(const T &a) const
6465
{
65-
typename numberst::const_iterator it=numbers.find(a);
66-
67-
if(it==numbers.end())
68-
return true;
69-
70-
n=it->second;
71-
return false;
66+
const auto it = numbers.find(a);
67+
if(it == numbers.end())
68+
{
69+
return {};
70+
}
71+
return it->second;
7272
}
7373

7474
void clear()
@@ -129,15 +129,15 @@ class hash_numbering final
129129
return (result.first)->second;
130130
}
131131

132-
bool get_number(const T &a, number_type &n) const
132+
optionalt<number_type> get_number(const T &a) const
133133
{
134-
typename numberst::const_iterator it=numbers.find(a);
134+
const auto it = numbers.find(a);
135135

136-
if(it==numbers.end())
137-
return true;
138-
139-
n=it->second;
140-
return false;
136+
if(it == numbers.end())
137+
{
138+
return {};
139+
}
140+
return it->second;
141141
}
142142

143143
void clear()

src/util/union_find.h

+8-10
Original file line numberDiff line numberDiff line change
@@ -168,16 +168,14 @@ class union_find final
168168
// are 'a' and 'b' in the same set?
169169
bool same_set(const T &a, const T &b) const
170170
{
171-
number_type na, nb;
172-
bool have_na=!numbers.get_number(a, na),
173-
have_nb=!numbers.get_number(b, nb);
171+
const optionalt<number_type> na = numbers.get_number(a);
172+
const optionalt<number_type> nb = numbers.get_number(a);
174173

175-
if(have_na && have_nb)
176-
return uuf.same_set(na, nb);
177-
else if(!have_na && !have_nb)
174+
if(na && nb)
175+
return uuf.same_set(*na, *nb);
176+
if(!na && !nb)
178177
return a==b;
179-
else
180-
return false;
178+
return false;
181179
}
182180

183181
// are 'a' and 'b' in the same set?
@@ -259,9 +257,9 @@ class union_find final
259257
uuf.isolate(number(a));
260258
}
261259

262-
bool get_number(const T &a, number_type &n) const
260+
optionalt<number_type> get_number(const T &a) const
263261
{
264-
return numbers.get_number(a, n);
262+
return numbers.get_number(a);
265263
}
266264

267265
size_t size() const { return numbers.size(); }

0 commit comments

Comments
 (0)