1#ifndef RAIIGRAPH_GRAPH_HPP
2#define RAIIGRAPH_GRAPH_HPP
26 void setup(igraph_int_t num_vertices, igraph_bool_t directed) {
27 check_code(igraph_empty(&my_graph, num_vertices, directed));
37 Graph(igraph_int_t num_vertices = 0, igraph_bool_t directed =
false) {
38 setup(num_vertices, directed);
49 Graph(
const IntVector& edges, igraph_int_t num_vertices, igraph_bool_t directed) :
Graph(edges.
get(), num_vertices, directed) {}
58 Graph(
const igraph_vector_int_t* edges, igraph_int_t num_vertices, igraph_bool_t directed) {
59 check_code(igraph_create(&my_graph, edges, num_vertices, directed));
65 Graph(igraph_t&& graph) : my_graph(std::move(graph)) {}
72 check_code(igraph_copy(&my_graph, &(other.my_graph)));
80 check_code(igraph_copy(&my_graph, &(other.my_graph)));
91 std::swap(my_graph, other.my_graph);
100 std::swap(my_graph, other.my_graph);
109 igraph_destroy(&my_graph);
117 return igraph_vcount(&my_graph);
124 return igraph_ecount(&my_graph);
135 check_code(igraph_get_edgelist(&my_graph, out.
get(), by_col));
144 return igraph_is_directed(&my_graph);
153 igraph_bool_t
is_connected(igraph_connectedness_t mode = IGRAPH_WEAK)
const {
155 check_code(igraph_is_connected(&my_graph, &res, mode));
167 check_code(igraph_is_simple(&my_graph, &res, directed));
185 check_code(igraph_has_multiple(&my_graph, &res));
193 igraph_bool_t
has_mutual(igraph_bool_t loops =
false)
const {
195 check_code(igraph_has_mutual(&my_graph, &res, loops));
205 bool is_tree(igraph_neimode_t mode = IGRAPH_ALL)
const {
207 check_code(igraph_is_tree(&my_graph, &res, NULL, mode));
215 bool is_forest(igraph_neimode_t mode = IGRAPH_ALL)
const {
217 check_code(igraph_is_forest(&my_graph, &res, NULL, mode));
235 check_code(igraph_is_acyclic(&my_graph, &res));
244 operator igraph_t*() {
252 operator const igraph_t*()
const {
268 const igraph_t*
get()
const {
Wrapper around igraph_vector_*_t objects with RAII behavior.
Wrapper around igraph_t objects with RAII behavior.
Definition Graph.hpp:24
Graph & operator=(const Graph &other)
Definition Graph.hpp:78
IntVector get_edgelist(igraph_bool_t by_col=false) const
Definition Graph.hpp:133
Graph(const Graph &other)
Definition Graph.hpp:71
igraph_t * get()
Definition Graph.hpp:260
Graph(igraph_t &&graph)
Definition Graph.hpp:65
Graph(const igraph_vector_int_t *edges, igraph_int_t num_vertices, igraph_bool_t directed)
Definition Graph.hpp:58
Graph & operator=(Graph &&other)
Definition Graph.hpp:98
Graph(const IntVector &edges, igraph_int_t num_vertices, igraph_bool_t directed)
Definition Graph.hpp:49
igraph_bool_t has_loop() const
Definition Graph.hpp:174
igraph_bool_t is_directed() const
Definition Graph.hpp:143
const igraph_t * get() const
Definition Graph.hpp:268
bool is_dag() const
Definition Graph.hpp:224
igraph_bool_t is_simple(igraph_bool_t directed) const
Definition Graph.hpp:165
~Graph()
Definition Graph.hpp:108
igraph_int_t ecount() const
Definition Graph.hpp:123
igraph_bool_t has_mutual(igraph_bool_t loops=false) const
Definition Graph.hpp:193
igraph_int_t vcount() const
Definition Graph.hpp:116
bool is_acyclic() const
Definition Graph.hpp:233
bool is_forest(igraph_neimode_t mode=IGRAPH_ALL) const
Definition Graph.hpp:215
igraph_bool_t has_multiple() const
Definition Graph.hpp:183
bool is_tree(igraph_neimode_t mode=IGRAPH_ALL) const
Definition Graph.hpp:205
Graph(Graph &&other)
Definition Graph.hpp:89
Graph(igraph_int_t num_vertices=0, igraph_bool_t directed=false)
Definition Graph.hpp:37
igraph_bool_t is_connected(igraph_connectedness_t mode=IGRAPH_WEAK) const
Definition Graph.hpp:153
Wrapper around igraph_vector_*_t objects with RAII behavior.
Definition Vector.hpp:29
igraph_type * get()
Definition Vector.hpp:499
Error handling for raiigraph.
Utilities for manipulating igraph data structures in C++.
Definition error.hpp:11
void check_code(igraph_error_t code)
Definition error.hpp:39