Skip to content

Commit 5e27d28

Browse files
committed
Remove member_offset_iterator
It is undocumented and its fields don't carry descriptive names, thus code using it is hard to read and understand. With all the preceding work it only had a single user left.
1 parent 4b3e3c4 commit 5e27d28

File tree

2 files changed

+18
-58
lines changed

2 files changed

+18
-58
lines changed

src/util/pointer_offset_size.cpp

Lines changed: 18 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,62 +21,38 @@ Author: Daniel Kroening, [email protected]
2121
#include "ssa_expr.h"
2222
#include "std_expr.h"
2323

24-
member_offset_iterator::member_offset_iterator(
25-
const struct_typet &_type,
26-
const namespacet &_ns):
27-
current({0, 0}),
28-
type(_type),
29-
ns(_ns),
30-
bit_field_bits(0)
24+
mp_integer member_offset(
25+
const struct_typet &type,
26+
const irep_idt &member,
27+
const namespacet &ns)
3128
{
32-
}
29+
mp_integer result = 0;
30+
std::size_t bit_field_bits=0;
3331

34-
member_offset_iterator &member_offset_iterator::operator++()
35-
{
36-
if(current.second!=-1) // Already failed?
32+
for(const auto &comp : type.components())
3733
{
38-
const auto &comp=type.components()[current.first];
39-
if(comp.type().id()==ID_c_bit_field)
34+
if(comp.get_name() == member)
35+
return result;
36+
37+
if(comp.type().id() == ID_c_bit_field)
4038
{
41-
// take the extra bytes needed
42-
std::size_t w=to_c_bit_field_type(comp.type()).get_width();
39+
const std::size_t w = to_c_bit_field_type(comp.type()).get_width();
4340
bit_field_bits += w;
44-
current.second += bit_field_bits / 8;
41+
result += bit_field_bits / 8;
4542
bit_field_bits %= 8;
4643
}
4744
else
4845
{
4946
DATA_INVARIANT(
5047
bit_field_bits == 0, "padding ensures offset at byte boundaries");
51-
const typet &subtype=comp.type();
52-
mp_integer sub_size=pointer_offset_size(subtype, ns);
53-
if(sub_size==-1)
54-
current.second=-1; // give up
55-
else current.second+=sub_size;
48+
const mp_integer sub_size = pointer_offset_size(comp.type(), ns);
49+
if(sub_size == -1)
50+
return -1;
51+
result += sub_size;
5652
}
5753
}
58-
++current.first;
59-
return *this;
60-
}
61-
62-
mp_integer member_offset(
63-
const struct_typet &type,
64-
const irep_idt &member,
65-
const namespacet &ns)
66-
{
67-
const struct_typet::componentst &components=type.components();
68-
member_offset_iterator offsets(type, ns);
69-
70-
for(struct_typet::componentst::const_iterator
71-
it=components.begin();
72-
it!=components.end() && offsets->second!=-1;
73-
++it, ++offsets)
74-
{
75-
if(it->get_name()==member)
76-
break;
77-
}
7854

79-
return offsets->second;
55+
return result;
8056
}
8157

8258
mp_integer member_offset_bits(

src/util/pointer_offset_size.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,6 @@ class constant_exprt;
2424

2525
// these return -1 on failure
2626

27-
// NOLINTNEXTLINE(readability/identifiers)
28-
class member_offset_iterator
29-
{
30-
typedef std::pair<size_t, mp_integer> refst;
31-
refst current;
32-
const struct_typet &type;
33-
const namespacet &ns;
34-
size_t bit_field_bits;
35-
public:
36-
member_offset_iterator(const struct_typet &_type,
37-
const namespacet &_ns);
38-
member_offset_iterator &operator++();
39-
const refst &operator*() const { return current; }
40-
const refst* operator->() const { return &current; }
41-
};
42-
4327
mp_integer member_offset(
4428
const struct_typet &type,
4529
const irep_idt &member,

0 commit comments

Comments
 (0)