14 #ifndef CPROVER_GOTO_PROGRAMS_CLASS_HIERARCHY_H
15 #define CPROVER_GOTO_PROGRAMS_CLASS_HIERARCHY_H
19 #include <unordered_map>
24 #define OPT_SHOW_CLASS_HIERARCHY \
25 "(show-class-hierarchy)"
27 #define HELP_SHOW_CLASS_HIERARCHY \
28 " {y--show-class-hierarchy} \t show the class hierarchy\n"
43 typedef std::vector<irep_idt>
idst;
60 (*this)(symbol_table);
81 void output(std::ostream &,
bool children_only)
const;
103 typedef std::vector<irep_idt>
idst;
139 bool children_only =
false);
void show_class_hierarchy(const class_hierarchyt &hierarchy, ui_message_handlert &message_handler, bool children_only=false)
Output the class hierarchy.
Class hierarchy graph node: simply contains a class identifier.
irep_idt class_identifier
Class ID for this node.
Class hierarchy, represented using grapht and therefore suitable for use with generic graph algorithm...
std::unordered_map< irep_idt, node_indext > nodes_by_namet
Maps class identifiers onto node indices.
const nodes_by_namet & get_nodes_by_class_identifier() const
Get map from class identifier to node index.
void populate(const symbol_table_baset &)
Populate the class hierarchy graph, such that there is a node for every struct type in the symbol tab...
nodes_by_namet nodes_by_name
Maps class identifiers onto node indices.
idst get_children_trans(const irep_idt &c) const
Get all the classes that inherit (directly or indirectly) from class c.
std::vector< irep_idt > idst
idst get_direct_children(const irep_idt &c) const
Get all the classes that directly (i.e.
idst get_other_reachable_ids(const irep_idt &c, bool forwards) const
Helper function for get_children_trans and get_parents_trans
idst get_parents_trans(const irep_idt &c) const
Get all the classes that class c inherits from (directly or indirectly).
idst ids_from_indices(const std::vector< node_indext > &nodes) const
Helper function that converts a vector of node_indext to a vector of ids that are stored in the corre...
Non-graph-based representation of the class hierarchy.
idst get_parents_trans(const irep_idt &id) const
void output_dot(std::ostream &) const
Output class hierarchy in Graphviz DOT format.
void get_parents_trans_rec(const irep_idt &, idst &) const
Get all the classes that class c inherits from (directly or indirectly).
class_hierarchyt & operator=(const class_hierarchyt &)=delete
class_hierarchyt(const symbol_table_baset &symbol_table)
std::map< irep_idt, entryt > class_mapt
void operator()(const symbol_table_baset &)
Looks for all the struct types in the symbol table and construct a map from class names to a data str...
class_hierarchyt()=default
void get_children_trans_rec(const irep_idt &, idst &) const
idst get_children_trans(const irep_idt &id) const
void output(std::ostream &, bool children_only) const
Output the class hierarchy in plain text.
class_hierarchyt(const class_hierarchyt &)=delete
std::vector< irep_idt > idst
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
This class represents a node in a directed graph.
A generic directed graph with a parametric node type.
Provides methods for streaming JSON arrays.
The symbol table base class interface.
A Template Class for Graphs.