21#ifndef GCC_DIAGNOSTICS_DIGRAPHS_H
22#define GCC_DIAGNOSTICS_DIGRAPHS_H
62 const char *utf8_value);
78 template <
typename EnumType>
90 template <
typename EnumType>
96 bag.set_enum<EnumType> (property, value);
102 std::unique_ptr<json::value> value);
150 m_description = std::make_unique<std::string> (std::move (desc));
198 std::unique_ptr<json::object>
201 std::unique_ptr<dot::graph>
208 m_nodes.push_back (std::move (n));
215 m_edges.push_back (std::move (e));
222 const char *label =
nullptr);
224 std::unique_ptr<digraph>
clone ()
const;
263 g.add_node_id (std::move (
id), *
this);
282 m_label = std::make_unique<std::string> (label);
289 m_label = std::make_unique<std::string> (std::move (label));
334 std::unique_ptr<json::object>
337 std::unique_ptr<node>
339 std::map<node *, node *> &node_mapping)
const;
368 g.add_edge_id (
m_id, *
this);
386 m_label = std::make_unique<std::string> (label);
400 std::unique_ptr<json::object>
403 std::unique_ptr<edge>
405 const std::map<diagnostics::digraphs::node *, diagnostics::digraphs::node *> &node_mapping)
const;
Definition diagnostics/digraphs.h:123
std::unique_ptr< std::string > m_description
Definition diagnostics/digraphs.h:244
digraph()
Definition diagnostics/digraphs.h:128
void set_graph_kind(const char *)
Definition diagnostics/digraphs.cc:375
size_t get_num_edges() const
Definition diagnostics/digraphs.h:184
edge * get_edge_by_id(const char *id) const
Definition diagnostics/digraphs.h:163
friend class edge
Definition diagnostics/digraphs.h:126
const char * get_graph_kind() const
Definition diagnostics/digraphs.cc:369
std::vector< std::unique_ptr< edge > > m_edges
Definition diagnostics/digraphs.h:248
size_t m_next_edge_id_index
Definition diagnostics/digraphs.h:249
std::unique_ptr< digraph > clone() const
Definition diagnostics/digraphs.cc:307
void set_description(std::string desc)
Definition diagnostics/digraphs.h:148
void add_node_id(std::string node_id, node &new_node)
Definition diagnostics/digraphs.h:231
std::unique_ptr< json::object > make_json_sarif_graph() const
Definition diagnostics/digraphs.cc:294
std::unique_ptr< dot::graph > make_dot_graph() const
Definition diagnostics/digraphs.cc:300
node * get_node_by_id(const char *id) const
Definition diagnostics/digraphs.h:154
void add_node(std::unique_ptr< node > n)
Definition diagnostics/digraphs.h:205
void dump() const
Definition diagnostics/digraphs.cc:288
void add_edge_id(std::string edge_id, edge &new_edge)
Definition diagnostics/digraphs.h:236
std::map< std::string, node * > m_id_to_node_map
Definition diagnostics/digraphs.h:245
std::string make_edge_id(const char *edge_id)
Definition diagnostics/digraphs.cc:347
const char * get_description() const
Definition diagnostics/digraphs.h:132
edge & get_edge(size_t idx) const
Definition diagnostics/digraphs.h:190
size_t get_num_nodes() const
Definition diagnostics/digraphs.h:172
virtual ~digraph()
Definition diagnostics/digraphs.h:129
std::vector< std::unique_ptr< node > > m_nodes
Definition diagnostics/digraphs.h:247
void add_edge(std::unique_ptr< edge > e)
Definition diagnostics/digraphs.h:212
std::map< std::string, edge * > m_id_to_edge_map
Definition diagnostics/digraphs.h:246
node & get_node(size_t idx) const
Definition diagnostics/digraphs.h:178
void set_description(const char *desc)
Definition diagnostics/digraphs.h:140
Definition diagnostics/digraphs.h:352
edge(digraph &g, const char *id, node &src_node, node &dst_node)
Definition diagnostics/digraphs.h:360
std::string get_id() const
Definition diagnostics/digraphs.h:372
node & m_src_node
Definition diagnostics/digraphs.h:410
virtual ~edge()
Definition diagnostics/digraphs.h:354
std::string m_id
Definition diagnostics/digraphs.h:408
void dump() const
Definition diagnostics/digraphs.cc:435
node & get_dst_node() const
Definition diagnostics/digraphs.h:395
node & m_dst_node
Definition diagnostics/digraphs.h:411
std::unique_ptr< edge > clone(digraph &new_graph, const std::map< diagnostics::digraphs::node *, diagnostics::digraphs::node * > &node_mapping) const
std::unique_ptr< json::object > to_json_sarif_edge() const
Definition diagnostics/digraphs.cc:441
std::unique_ptr< std::string > m_label
Definition diagnostics/digraphs.h:409
void set_label(const char *label)
Definition diagnostics/digraphs.h:383
const char * get_label() const
Definition diagnostics/digraphs.h:375
node & get_src_node() const
Definition diagnostics/digraphs.h:392
Definition diagnostics/digraphs.h:255
std::string get_id() const
Definition diagnostics/digraphs.h:268
std::unique_ptr< json::object > to_json_sarif_node() const
Definition diagnostics/digraphs.cc:389
void add_child(std::unique_ptr< node > child)
Definition diagnostics/digraphs.h:299
void dump() const
Definition diagnostics/digraphs.cc:383
std::unique_ptr< node > clone(digraph &new_graph, std::map< node *, node * > &node_mapping) const
Definition diagnostics/digraphs.cc:395
void set_label(std::string label)
Definition diagnostics/digraphs.h:287
std::unique_ptr< std::string > m_label
Definition diagnostics/digraphs.h:343
node(const node &)=delete
std::vector< std::unique_ptr< node > > m_children
Definition diagnostics/digraphs.h:344
location_t get_physical_loc() const
Definition diagnostics/digraphs.h:306
logical_locations::key get_logical_loc() const
Definition diagnostics/digraphs.h:318
std::string m_id
Definition diagnostics/digraphs.h:342
void set_physical_loc(location_t physical_loc)
Definition diagnostics/digraphs.h:312
void set_label(const char *label)
Definition diagnostics/digraphs.h:279
size_t get_num_children() const
Definition diagnostics/digraphs.h:293
void print(graphviz_out &gv) const
const char * get_label() const
Definition diagnostics/digraphs.h:271
node(digraph &g, std::string id)
Definition diagnostics/digraphs.h:259
virtual ~node()
Definition diagnostics/digraphs.h:257
node & get_child(size_t idx) const
Definition diagnostics/digraphs.h:296
location_t m_physical_loc
Definition diagnostics/digraphs.h:345
logical_locations::key m_logical_loc
Definition diagnostics/digraphs.h:346
void set_logical_loc(logical_locations::key logical_loc)
Definition diagnostics/digraphs.h:324
Definition diagnostics/digraphs.h:57
tristate get_property_as_tristate(const json::bool_property &property) const
Definition diagnostics/digraphs.cc:231
const char * get_property(const json::string_property &property) const
Definition diagnostics/digraphs.cc:179
void set_property(const json::enum_property< EnumType > &property, EnumType value)
Definition diagnostics/digraphs.h:92
bool maybe_get_property(const json::integer_property &property, long &out) const
Definition diagnostics/digraphs.cc:200
void set_property_bag(std::unique_ptr< json::object > property_bag)
Definition diagnostics/digraphs.h:111
json::object * get_property_bag() const
Definition diagnostics/digraphs.h:105
std::unique_ptr< json::object > m_property_bag
Definition diagnostics/digraphs.h:117
json::object & ensure_property_bag()
Definition diagnostics/digraphs.cc:278
EnumType get_property(const json::enum_property< EnumType > &property) const
Definition diagnostics/digraphs.h:80
void set_property(const json::string_property &property, const char *utf8_value)
Definition diagnostics/digraphs.cc:190
Definition logical-locations.h:101
Definition graphviz.h:385
gcc::context * g
Definition context.cc:29
struct graph * new_graph(int n_vertices)
Definition graphds.cc:50
Definition custom-sarif-properties/state-graphs.h:33
Definition diagnostics/context.h:39
Definition coretypes.h:167
Definition graphviz.cc:147
property< literal > bool_property
Definition json.h:139
property< value > json_property
Definition json.h:140
property< integer_number > integer_property
Definition json.h:138
property< array > array_of_string_property
Definition json.h:141
property< string > string_property
Definition json.h:137
property< enum_traits< EnumType > > enum_property
Definition json.h:154
Definition graphviz.h:160
Definition collect2.cc:168
static enum_t get_unknown_value()
#define gcc_assert(EXPR)
Definition system.h:814