13 #ifndef CPROVER_POINTER_ANALYSIS_VALUE_SET_FI_H
14 #define CPROVER_POINTER_ANALYSIS_VALUE_SET_FI_H
19 #include <unordered_set>
60 typedef std::optional<mp_integer>
offsett;
63 return offset && offset->is_zero();
68 typedef std::map<object_numberingt::number_type, offsett>
data_typet;
94 template <
typename It>
112 dest.
write()[it.first]=it.second;
117 return insert(dest, it.first, it.second);
141 dest.
write()[n] = offset;
148 if(old_offset && offset)
150 if(*old_offset == *offset)
183 entryt(
const idt &_identifier,
const std::string _suffix):
204 const idt &identifier,
205 const std::string &suffix);
231 std::pair<valuest::iterator, bool>
r=
232 values.insert(std::pair<idt, entryt>(index, e));
234 return r.first->second;
239 for(std::list<entryt>::const_iterator
248 std::ostream &out)
const;
297 bool &includes_nondet_pointer,
298 const std::string &suffix,
299 const typet &original_type,
328 const std::string &suffix,
Data structure for representing an arbitrary statement in a program.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
std::vector< exprt > operandst
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
number_type number(const key_type &a)
The type of an expression, extends irept.
offsett & operator[](object_numberingt::number_type i)
const_iterator find(T &&t) const
data_typet::value_type value_type
std::map< object_numberingt::number_type, offsett > data_typet
const_iterator cbegin() const
const_iterator begin() const
const_iterator end() const
data_typet::const_iterator const_iterator
const_iterator cend() const
static const object_map_dt blank
data_typet::iterator iterator
bool insert(object_mapt &dest, const exprt &expr, const offsett &offset) const
std::optional< mp_integer > offsett
Represents the offset into an object: either a unique integer offset, or an unknown value,...
void get_reference_set_sharing(const exprt &expr, expr_sett &expr_set, const namespacet &ns) const
entryt & get_entry(const entryt &e)
static object_numberingt object_numbering
void get_reference_set(const exprt &expr, expr_sett &expr_set, const namespacet &ns) const
void assign(const exprt &lhs, const exprt &rhs, const namespacet &ns)
static numberingt< irep_idt > function_numbering
void add_var(const idt &id)
std::unordered_set< idt > assign_recursion_sett
entryt & get_entry(const idt &id, const std::string &suffix)
bool make_union(object_mapt &dest, const object_mapt &src) const
void add_vars(const std::list< entryt > &vars)
std::vector< exprt > get_value_set(const exprt &expr, const namespacet &ns) const
void set_from(const irep_idt &function, unsigned inx)
void set_to(const irep_idt &function, unsigned inx)
bool make_union(const value_set_fit &new_values)
void apply_code(const codet &code, const namespacet &ns)
void get_value_set_rec(const exprt &expr, object_mapt &dest, bool &includes_nondet_pointer, const std::string &suffix, const typet &original_type, const namespacet &ns, gvs_recursion_sett &recursion_set) const
reference_counting< object_map_dt > object_mapt
void assign_rec(const exprt &lhs, const object_mapt &values_rhs, const std::string &suffix, const namespacet &ns, assign_recursion_sett &recursion_set)
void get_reference_set_sharing(const exprt &expr, object_mapt &dest, const namespacet &ns) const
void dereference_rec(const exprt &src, exprt &dest) const
void output(const namespacet &ns, std::ostream &out) const
void flatten_rec(const entryt &, object_mapt &, flatten_seent &) const
std::unordered_set< idt > recfind_recursion_sett
std::unordered_set< exprt, irep_hash > expr_sett
void do_end_function(const exprt &lhs, const namespacet &ns)
std::set< idt > flatten_seent
std::unordered_set< unsigned int > dynamic_object_id_sett
void flatten(const entryt &e, object_mapt &dest) const
expr_sett & get(const idt &identifier, const std::string &suffix)
bool offset_is_zero(const offsett &offset) const
unsigned from_target_index
bool insert(object_mapt &dest, const object_map_dt::value_type &it) const
void add_var(const entryt &e)
std::unordered_set< idt > gvs_recursion_sett
bool insert(object_mapt &dest, object_numberingt::number_type n, const offsett &offset) const
std::map< idt, entryt > valuest
exprt to_expr(const object_map_dt::value_type &it) const
void set(object_mapt &dest, const object_map_dt::value_type &it) const
bool insert(object_mapt &dest, const exprt &src) const
bool insert(object_mapt &dest, const exprt &src, const mp_integer &offset_value) const
void do_function_call(const irep_idt &function, const exprt::operandst &arguments, const namespacet &ns)
void get_reference_set_sharing_rec(const exprt &expr, object_mapt &dest, const namespacet &ns) const
std::unordered_set< exprt, irep_hash > expr_sett
const std::string & id2string(const irep_idt &d)
entryt(const idt &_identifier, const std::string _suffix)