21#ifndef GCC_DIAGNOSTIC_DIGRAPHS_H
22#define GCC_DIAGNOSTIC_DIGRAPHS_H
60 const char *key)
const;
70 std::unique_ptr<json::value>
value);
115 m_description = std::make_unique<std::string> (std::move (desc));
163 std::unique_ptr<json::object>
166 std::unique_ptr<dot::graph>
173 m_nodes.push_back (std::move (n));
180 m_edges.push_back (std::move (e));
187 const char *label =
nullptr);
189 std::unique_ptr<digraph>
clone ()
const;
225 g.add_node_id (std::move (
id), *
this);
244 m_label = std::make_unique<std::string> (label);
251 m_label = std::make_unique<std::string> (std::move (label));
296 std::unique_ptr<json::object>
299 std::unique_ptr<node>
301 std::map<node *, node *> &node_mapping)
const;
330 g.add_edge_id (
m_id, *
this);
348 m_label = std::make_unique<std::string> (label);
362 std::unique_ptr<json::object>
365 std::unique_ptr<edge>
367 const std::map<diagnostics::digraphs::node *, diagnostics::digraphs::node *> &node_mapping)
const;
391 virtual std::unique_ptr<digraph>
408 const std::vector<std::unique_ptr<digraph>> &
412 virtual std::unique_ptr<std::vector<std::unique_ptr<digraph>>>
415 mutable std::unique_ptr<std::vector<std::unique_ptr<digraph>>>
m_digraphs;
Definition diagnostic-digraphs.h:88
std::unique_ptr< std::string > m_description
Definition diagnostic-digraphs.h:206
digraph()
Definition diagnostic-digraphs.h:93
friend class node
Definition diagnostic-digraphs.h:90
size_t get_num_edges() const
Definition diagnostic-digraphs.h:149
edge * get_edge_by_id(const char *id) const
Definition diagnostic-digraphs.h:128
friend class edge
Definition diagnostic-digraphs.h:91
std::vector< std::unique_ptr< edge > > m_edges
Definition diagnostic-digraphs.h:210
size_t m_next_edge_id_index
Definition diagnostic-digraphs.h:211
void set_description(std::string desc)
Definition diagnostic-digraphs.h:113
void add_node_id(std::string node_id, node &new_node)
Definition diagnostic-digraphs.h:193
std::unique_ptr< json::object > make_json_sarif_graph() const
Definition diagnostic-digraphs.cc:213
std::unique_ptr< dot::graph > make_dot_graph() const
Definition diagnostic-digraphs.cc:219
node * get_node_by_id(const char *id) const
Definition diagnostic-digraphs.h:119
void add_node(std::unique_ptr< node > n)
Definition diagnostic-digraphs.h:170
void dump() const
Definition diagnostic-digraphs.cc:207
void add_edge_id(std::string edge_id, edge &new_edge)
Definition diagnostic-digraphs.h:198
std::map< std::string, node * > m_id_to_node_map
Definition diagnostic-digraphs.h:207
std::string make_edge_id(const char *edge_id)
Definition diagnostic-digraphs.cc:266
const char * get_description() const
Definition diagnostic-digraphs.h:97
std::unique_ptr< digraph > clone() const
Definition diagnostic-digraphs.cc:226
edge & get_edge(size_t idx) const
Definition diagnostic-digraphs.h:155
size_t get_num_nodes() const
Definition diagnostic-digraphs.h:137
virtual ~digraph()
Definition diagnostic-digraphs.h:94
std::vector< std::unique_ptr< node > > m_nodes
Definition diagnostic-digraphs.h:209
void add_edge(std::unique_ptr< edge > e)
Definition diagnostic-digraphs.h:177
std::map< std::string, edge * > m_id_to_edge_map
Definition diagnostic-digraphs.h:208
node & get_node(size_t idx) const
Definition diagnostic-digraphs.h:143
void set_description(const char *desc)
Definition diagnostic-digraphs.h:105
Definition diagnostic-digraphs.h:314
edge(digraph &g, const char *id, node &src_node, node &dst_node)
Definition diagnostic-digraphs.h:322
std::string get_id() const
Definition diagnostic-digraphs.h:334
node & m_src_node
Definition diagnostic-digraphs.h:372
virtual ~edge()
Definition diagnostic-digraphs.h:316
std::string m_id
Definition diagnostic-digraphs.h:370
void dump() const
Definition diagnostic-digraphs.cc:343
node & get_dst_node() const
Definition diagnostic-digraphs.h:357
node & m_dst_node
Definition diagnostic-digraphs.h:373
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 diagnostic-digraphs.cc:349
std::unique_ptr< std::string > m_label
Definition diagnostic-digraphs.h:371
void set_label(const char *label)
Definition diagnostic-digraphs.h:345
const char * get_label() const
Definition diagnostic-digraphs.h:337
node & get_src_node() const
Definition diagnostic-digraphs.h:354
Definition diagnostic-digraphs.h:383
std::unique_ptr< digraph > m_digraph
Definition diagnostic-digraphs.h:394
virtual ~lazy_digraph()
Definition diagnostic-digraphs.h:385
virtual std::unique_ptr< digraph > create_digraph() const =0
const digraph & get_or_create_digraph() const
Definition diagnostic-digraphs.cc:357
Definition diagnostic-digraphs.h:404
const std::vector< std::unique_ptr< digraph > > & get_or_create_digraphs() const
Definition diagnostic-digraphs.cc:368
virtual std::unique_ptr< std::vector< std::unique_ptr< digraph > > > create_digraphs() const =0
virtual ~lazy_digraphs()
Definition diagnostic-digraphs.h:406
std::unique_ptr< std::vector< std::unique_ptr< digraph > > > m_digraphs
Definition diagnostic-digraphs.h:415
Definition diagnostic-digraphs.h:217
std::unique_ptr< json::object > to_json_sarif_node() const
Definition diagnostic-digraphs.cc:296
std::string get_id() const
Definition diagnostic-digraphs.h:230
void set_logical_loc(logical_location logical_loc)
Definition diagnostic-digraphs.h:286
void add_child(std::unique_ptr< node > child)
Definition diagnostic-digraphs.h:261
std::unique_ptr< node > clone(digraph &new_graph, std::map< node *, node * > &node_mapping) const
Definition diagnostic-digraphs.cc:302
void set_label(std::string label)
Definition diagnostic-digraphs.h:249
std::unique_ptr< std::string > m_label
Definition diagnostic-digraphs.h:305
node(const node &)=delete
logical_location m_logical_loc
Definition diagnostic-digraphs.h:308
std::vector< std::unique_ptr< node > > m_children
Definition diagnostic-digraphs.h:306
location_t get_physical_loc() const
Definition diagnostic-digraphs.h:268
void dump() const
Definition diagnostic-digraphs.cc:290
std::string m_id
Definition diagnostic-digraphs.h:304
void set_physical_loc(location_t physical_loc)
Definition diagnostic-digraphs.h:274
void set_label(const char *label)
Definition diagnostic-digraphs.h:241
size_t get_num_children() const
Definition diagnostic-digraphs.h:255
void print(graphviz_out &gv) const
const char * get_label() const
Definition diagnostic-digraphs.h:233
node(digraph &g, std::string id)
Definition diagnostic-digraphs.h:221
virtual ~node()
Definition diagnostic-digraphs.h:219
node & get_child(size_t idx) const
Definition diagnostic-digraphs.h:258
logical_location get_logical_loc() const
Definition diagnostic-digraphs.h:280
location_t m_physical_loc
Definition diagnostic-digraphs.h:307
Definition diagnostic-digraphs.h:56
void set_attr(const char *key_prefix, const char *key, const char *value)
Definition diagnostic-digraphs.cc:189
const char * get_attr(const char *key_prefix, const char *key) const
Definition diagnostic-digraphs.cc:176
void set_property_bag(std::unique_ptr< json::object > property_bag)
Definition diagnostic-digraphs.h:76
json::object * get_property_bag() const
Definition diagnostic-digraphs.h:73
void set_json_attr(const char *key_prefix, const char *key, std::unique_ptr< json::value > value)
Definition diagnostic-digraphs.cc:196
std::unique_ptr< json::object > m_property_bag
Definition diagnostic-digraphs.h:82
Definition graphviz.h:385
Definition diagnostic-format-sarif.h:169
Definition diagnostic-format-sarif.h:155
Definition diagnostic-format-sarif.h:162
gcc::context * g
Definition context.cc:29
struct graph * new_graph(int n_vertices)
Definition graphds.cc:50
logical_location_manager::key logical_location
Definition logical-location.h:173
@ value
Definition logical-location.h:59
Definition diagnostic-digraphs.h:36
Definition diagnostic-digraphs.h:35
Definition diagnostic-digraphs.h:33
Definition graphviz.h:160
Definition collect2.cc:168
#define gcc_assert(EXPR)
Definition system.h:814