CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
boolbv_width.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9
10#ifndef CPROVER_SOLVERS_FLATTENING_BOOLBV_WIDTH_H
11#define CPROVER_SOLVERS_FLATTENING_BOOLBV_WIDTH_H
12
13#include <util/type.h> // IWYU pragma: keep
14
15class namespacet;
16class struct_typet;
17
19{
20public:
21 explicit boolbv_widtht(const namespacet &_ns);
22 virtual ~boolbv_widtht() = default;
23
24 virtual std::size_t operator()(const typet &type) const
25 {
26 const auto &entry_opt = get_entry(type);
27 CHECK_RETURN(entry_opt.has_value());
28 return entry_opt->total_width;
29 }
30
31 virtual std::optional<std::size_t> get_width_opt(const typet &type) const
32 {
33 const auto &entry_opt = get_entry(type);
34 if(!entry_opt.has_value())
35 return std::nullopt;
36 return entry_opt->total_width;
37 }
38
39 struct membert
40 {
41 std::size_t offset, width;
42 };
43
44 const membert &
45 get_member(const struct_typet &type, const irep_idt &member) const;
46
47protected:
48 const namespacet &ns;
49
51 {
53 {
54 }
55
56 std::size_t total_width;
57 std::vector<membert> members;
58 };
59 using entryt = std::optional<defined_entryt>;
60
61 typedef std::unordered_map<typet, entryt, irep_hash> cachet;
62
63 // the 'mutable' is allow const methods above
64 mutable cachet cache;
65
66 const entryt &get_entry(const typet &type) const;
67};
68
69#endif // CPROVER_SOLVERS_FLATTENING_BOOLBV_WIDTH_H
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
const namespacet & ns
const entryt & get_entry(const typet &type) const
std::optional< defined_entryt > entryt
virtual std::size_t operator()(const typet &type) const
std::unordered_map< typet, entryt, irep_hash > cachet
virtual ~boolbv_widtht()=default
virtual std::optional< std::size_t > get_width_opt(const typet &type) const
const membert & get_member(const struct_typet &type, const irep_idt &member) const
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition namespace.h:91
Structure type, corresponds to C style structs.
Definition std_types.h:231
The type of an expression, extends irept.
Definition type.h:29
#define CHECK_RETURN(CONDITION)
Definition invariant.h:495
std::vector< membert > members
defined_entryt(std::size_t total_width)
Defines typet, type_with_subtypet and type_with_subtypest.