CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
full_struct_abstract_object.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Struct abstract object
4
5Author: Thomas Kiley, thomas.kiley@diffblue.com
6
7\*******************************************************************/
8
11#ifndef CPROVER_ANALYSES_VARIABLE_SENSITIVITY_FULL_STRUCT_ABSTRACT_OBJECT_H
12#define CPROVER_ANALYSES_VARIABLE_SENSITIVITY_FULL_STRUCT_ABSTRACT_OBJECT_H
13
15#include <iosfwd>
16#include <util/sharing_map.h>
17
19 full_struct_abstract_objectt,
20 struct_aggregate_typet>
21{
22public:
28
35
43
49 const exprt &expr,
50 const abstract_environmentt &environment,
51 const namespacet &ns);
52
61 void output(
62 std::ostream &out,
63 const class ai_baset &ai,
64 const class namespacet &ns) const override;
65
75 write_location_context(const locationt &location) const override;
77 merge_location_context(const locationt &location) const override;
78
92
93 void statistics(
97 const namespacet &ns) const override;
98
99private:
100 // no entry means component is top
104
115 const widen_modet &widen_mode) const;
116
117protected:
119
132 const abstract_environmentt &environment,
133 const exprt &expr,
134 const namespacet &ns) const override;
135
154 abstract_environmentt &environment,
155 const namespacet &ns,
156 const std::stack<exprt> &stack,
157 const exprt &expr,
158 const abstract_object_pointert &value,
159 bool merging_write) const override;
160
169 bool verify() const override;
170
180 const abstract_object_pointert &other,
181 const widen_modet &widen_mode) const override;
182
183 exprt to_predicate_internal(const exprt &name) const override;
184};
185
186#endif // CPROVER_ANALYSES_VARIABLE_SENSITIVITY_FULL_STRUCT_ABSTRACT_OBJECT_H
Common behaviour for abstract objects modelling aggregate values - arrays, structs,...
#define CLONE
std::set< abstract_object_pointert > abstract_object_visitedt
sharing_ptrt< class abstract_objectt > abstract_object_pointert
goto_programt::const_targett locationt
virtual const typet & type() const
Get the real type of the variable this abstract object is representing.
This is the basic interface of the abstract interpreter with default implementations of the core func...
Definition ai.h:117
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
Base class for all expressions.
Definition expr.h:56
void output(std::ostream &out, const class ai_baset &ai, const class namespacet &ns) const override
To provide a human readable string to the out representing the current known value about this object.
abstract_object_pointert write_component(abstract_environmentt &environment, const namespacet &ns, const std::stack< exprt > &stack, const exprt &expr, const abstract_object_pointert &value, bool merging_write) const override
A helper function to evaluate writing to a component of a struct.
bool verify() const override
Function: full_struct_abstract_objectt::verify.
void statistics(abstract_object_statisticst &statistics, abstract_object_visitedt &visited, const abstract_environmentt &env, const namespacet &ns) const override
abstract_object_pointert write_location_context(const locationt &location) const override
Update the location context for an abstract object.
abstract_object_pointert visit_sub_elements(const abstract_object_visitort &visitor) const override
Apply a visitor operation to all sub elements of this abstract_object.
abstract_aggregate_objectt< full_struct_abstract_objectt, struct_aggregate_typet > abstract_aggregate_baset
abstract_object_pointert merge_constant_structs(constant_struct_pointert other, const widen_modet &widen_mode) const
Performs an element wise merge of the map for each struct.
abstract_object_pointert merge_location_context(const locationt &location) const override
Update the merge location context for an abstract object.
sharing_ptrt< full_struct_abstract_objectt > constant_struct_pointert
abstract_object_pointert read_component(const abstract_environmentt &environment, const exprt &expr, const namespacet &ns) const override
A helper function to evaluate the abstract object contained within a struct.
sharing_mapt< irep_idt, abstract_object_pointert, false, irep_id_hash > shared_struct_mapt
abstract_object_pointert merge(const abstract_object_pointert &other, const widen_modet &widen_mode) const override
To merge an abstract object into this abstract object.
exprt to_predicate_internal(const exprt &name) const override
to_predicate implementation - derived classes will override
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition namespace.h:91
The type of an expression, extends irept.
Definition type.h:29
Sharing map.
Pure virtual interface required of a client that can apply a copy-on-write operation to a given abstr...