CBMC
pointer_logic.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Pointer Logic
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_SOLVERS_FLATTENING_POINTER_LOGIC_H
13 #define CPROVER_SOLVERS_FLATTENING_POINTER_LOGIC_H
14 
15 #include <util/mp_arith.h>
16 #include <util/expr.h>
17 #include <util/numbering.h>
18 
19 class namespacet;
20 class pointer_typet;
21 
23 {
24 public:
25  // this numbers the objects
27 
28  struct pointert
29  {
31 
33  {
34  }
35 
37  : object(std::move(_obj)), offset(std::move(_off))
38  {
39  }
40  };
41 
44  const pointert &pointer,
45  const pointer_typet &type) const;
46 
48  exprt pointer_expr(const mp_integer &object, const pointer_typet &type) const;
49 
51  explicit pointer_logict(const namespacet &_ns);
52 
53  mp_integer add_object(const exprt &expr);
54 
56  const mp_integer &get_null_object() const
57  {
58  return null_object;
59  }
60 
63  {
64  return invalid_object;
65  }
66 
67  bool is_dynamic_object(const exprt &expr) const;
68 
69  void get_dynamic_objects(std::vector<mp_integer> &objects) const;
70 
71 protected:
72  const namespacet &ns;
74 };
75 
76 #endif // CPROVER_SOLVERS_FLATTENING_POINTER_LOGIC_H
mp_integer
BigInt mp_integer
Definition: smt_terms.h:17
mp_arith.h
pointer_logict::get_dynamic_objects
void get_dynamic_objects(std::vector< mp_integer > &objects) const
Definition: pointer_logic.cpp:34
numberingt< exprt, irep_hash >
exprt
Base class for all expressions.
Definition: expr.h:55
pointer_logict::pointer_logict
pointer_logict(const namespacet &_ns)
Definition: pointer_logic.cpp:158
pointer_logict::ns
const namespacet & ns
Definition: pointer_logic.h:72
pointer_logict
Definition: pointer_logic.h:22
pointer_logict::get_invalid_object
const mp_integer & get_invalid_object() const
Definition: pointer_logic.h:62
pointer_logict::~pointer_logict
~pointer_logict()
Definition: pointer_logic.cpp:168
expr.h
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
pointer_logict::pointert::offset
mp_integer offset
Definition: pointer_logic.h:30
pointer_logict::null_object
mp_integer null_object
Definition: pointer_logic.h:73
pointer_logict::invalid_object
mp_integer invalid_object
Definition: pointer_logic.h:73
pointer_logict::pointert::pointert
pointert()
Definition: pointer_logic.h:32
numbering.h
pointer_logict::objects
numberingt< exprt, irep_hash > objects
Definition: pointer_logic.h:26
pointer_logict::pointert::object
mp_integer object
Definition: pointer_logic.h:30
pointer_logict::pointert::pointert
pointert(mp_integer _obj, mp_integer _off)
Definition: pointer_logic.h:36
pointer_logict::is_dynamic_object
bool is_dynamic_object(const exprt &expr) const
Definition: pointer_logic.cpp:25
pointer_logict::add_object
mp_integer add_object(const exprt &expr)
Definition: pointer_logic.cpp:44
pointer_typet
The pointer type These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (they ...
Definition: pointer_expr.h:23
pointer_logict::pointert
Definition: pointer_logic.h:28
pointer_logict::get_null_object
const mp_integer & get_null_object() const
Definition: pointer_logic.h:56
pointer_logict::pointer_expr
exprt pointer_expr(const pointert &pointer, const pointer_typet &type) const
Convert an (object,offset) pair to an expression.
Definition: pointer_logic.cpp:67