cprover
boolbv_width.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: 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/std_types.h>
14 
15 class namespacet;
16 
18 {
19 public:
20  explicit boolbv_widtht(const namespacet &_ns);
21  virtual ~boolbv_widtht() = default;
22 
23  virtual std::size_t operator()(const typet &type) const
24  {
25  return get_entry(type).total_width;
26  }
27 
28  struct membert
29  {
30  std::size_t offset, width;
31  };
32 
33  const membert &get_member(
34  const struct_typet &type,
35  const irep_idt &member) const;
36 
37 protected:
38  const namespacet &ns;
39 
40  struct entryt
41  {
42  std::size_t total_width;
43  std::vector<membert> members;
44  };
45 
46  typedef std::unordered_map<typet, entryt, irep_hash> cachet;
47 
48  // the 'mutable' is allow const methods above
49  mutable cachet cache;
50 
51  const entryt &get_entry(const typet &type) const;
52 };
53 
54 #endif // CPROVER_SOLVERS_FLATTENING_BOOLBV_WIDTH_H
boolbv_widtht(const namespacet &_ns)
const namespacet & ns
Definition: boolbv_width.h:38
const entryt & get_entry(const typet &type) const
virtual std::size_t operator()(const typet &type) const
Definition: boolbv_width.h:23
std::unordered_map< typet, entryt, irep_hash > cachet
Definition: boolbv_width.h:46
virtual ~boolbv_widtht()=default
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:37
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:92
Structure type, corresponds to C style structs.
Definition: std_types.h:226
The type of an expression, extends irept.
Definition: type.h:28
Pre-defined types.
std::size_t total_width
Definition: boolbv_width.h:42
std::vector< membert > members
Definition: boolbv_width.h:43