PGROUTING
3.2
Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
a
b
c
d
e
f
g
i
l
m
o
p
r
s
t
u
v
w
x
Functions
a
b
c
d
e
g
i
o
p
s
Typedefs
Enumerations
Enumerator
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
~
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
y
~
Variables
a
b
c
d
e
f
g
i
l
m
n
o
p
q
r
s
t
u
v
w
x
y
Typedefs
b
c
d
e
g
i
l
o
p
s
v
Enumerations
Enumerator
Related Functions
c
d
e
i
o
p
s
Files
File List
File Members
All
_
a
b
c
d
e
f
g
i
l
m
o
p
r
s
t
u
v
Functions
_
a
c
d
e
f
g
i
o
p
r
s
t
Variables
Typedefs
Enumerations
Enumerator
Macros
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
biconnectedComponents_driver.cpp
Go to the documentation of this file.
1
/*PGR-GNU*****************************************************************
2
File: biconnectedComponents_driver.cpp
3
4
Generated with Template by:
5
Copyright (c) 2015 pgRouting developers
6
Mail: project@pgrouting.org
7
8
Function's developer:
9
Copyright (c) 2017 Maoguang Wang
10
Mail: xjtumg1007@gmail.com
11
12
------
13
14
This program is free software; you can redistribute it and/or modify
15
it under the terms of the GNU General Public License as published by
16
the Free Software Foundation; either version 2 of the License, or
17
(at your option) any later version.
18
19
This program is distributed in the hope that it will be useful,
20
but WITHOUT ANY WARRANTY; without even the implied warranty of
21
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
GNU General Public License for more details.
23
24
You should have received a copy of the GNU General Public License
25
along with this program; if not, write to the Free Software
26
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27
28
********************************************************************PGR-GNU*/
29
30
#include "
drivers/components/biconnectedComponents_driver.h
"
31
32
#include <sstream>
33
#include <deque>
34
#include <vector>
35
36
#include "
components/pgr_components.hpp
"
37
38
#include "
cpp_common/pgr_alloc.hpp
"
39
#include "
cpp_common/pgr_assert.h
"
40
41
#include "
cpp_common/pgr_base_graph.hpp
"
42
43
44
void
45
do_pgr_biconnectedComponents
(
46
pgr_edge_t
*data_edges,
47
size_t
total_edges,
48
pgr_components_rt
**return_tuples,
49
size_t
*return_count,
50
char
** log_msg,
51
char
** notice_msg,
52
char
** err_msg) {
53
std::ostringstream log;
54
std::ostringstream err;
55
std::ostringstream notice;
56
try
{
57
pgassert
(!(*log_msg));
58
pgassert
(!(*notice_msg));
59
pgassert
(!(*err_msg));
60
pgassert
(!(*return_tuples));
61
pgassert
(*return_count == 0);
62
pgassert
(total_edges != 0);
63
64
graphType
gType =
UNDIRECTED
;
65
66
log <<
"Working with Undirected Graph\n"
;
67
pgrouting::UndirectedGraph
undigraph(gType);
68
undigraph.
insert_edges
(data_edges, total_edges);
69
auto
results(
pgrouting::algorithms::biconnectedComponents
(undigraph));
70
71
auto
count = results.size();
72
73
if
(count == 0) {
74
(*return_tuples) = NULL;
75
(*return_count) = 0;
76
notice <<
77
"No paths found between start_vid and end_vid vertices"
;
78
return
;
79
}
80
81
(*return_tuples) =
pgr_alloc
(count, (*return_tuples));
82
for
(
size_t
i = 0; i < count; i++) {
83
*((*return_tuples) + i) = results[i];
84
}
85
(*return_count) = count;
86
87
pgassert
(*err_msg == NULL);
88
*log_msg = log.str().empty()?
89
*log_msg :
90
pgr_msg
(log.str().c_str());
91
*notice_msg = notice.str().empty()?
92
*notice_msg :
93
pgr_msg
(notice.str().c_str());
94
}
catch
(
AssertFailedException
&except) {
95
(*return_tuples) =
pgr_free
(*return_tuples);
96
(*return_count) = 0;
97
err << except.
what
();
98
*err_msg =
pgr_msg
(err.str().c_str());
99
*log_msg =
pgr_msg
(log.str().c_str());
100
}
catch
(std::exception &except) {
101
(*return_tuples) =
pgr_free
(*return_tuples);
102
(*return_count) = 0;
103
err << except.what();
104
*err_msg =
pgr_msg
(err.str().c_str());
105
*log_msg =
pgr_msg
(log.str().c_str());
106
}
catch
(...) {
107
(*return_tuples) =
pgr_free
(*return_tuples);
108
(*return_count) = 0;
109
err <<
"Caught unknown exception!"
;
110
*err_msg =
pgr_msg
(err.str().c_str());
111
*log_msg =
pgr_msg
(log.str().c_str());
112
}
113
}
114
pgrouting::algorithms::biconnectedComponents
std::vector< pgr_components_rt > biconnectedComponents(pgrouting::UndirectedGraph &graph)
Biconnected Components.
Definition:
pgr_components.cpp:101
pgr_alloc
T * pgr_alloc(std::size_t size, T *ptr)
allocates memory
Definition:
pgr_alloc.hpp:66
pgr_base_graph.hpp
pgr_edge_t
Definition:
pgr_edge_t.h:37
pgr_msg
char * pgr_msg(const std::string &msg)
Definition:
pgr_alloc.cpp:30
AssertFailedException::what
virtual const char * what() const
Definition:
pgr_assert.cpp:67
pgassert
#define pgassert(expr)
Uses the standard assert syntax.
Definition:
pgr_assert.h:94
pgr_components.hpp
UNDIRECTED
@ UNDIRECTED
Definition:
graph_enum.h:30
pgrouting::graph::Pgr_base_graph::insert_edges
void insert_edges(const T *edges, size_t count)
Inserts count edges of type T into the graph.
Definition:
pgr_base_graph.hpp:357
pgr_alloc.hpp
pgr_components_rt
Definition:
pgr_components_rt.h:39
graphType
graphType
Definition:
graph_enum.h:30
pgr_assert.h
An assert functionality that uses C++ throw().
biconnectedComponents_driver.h
do_pgr_biconnectedComponents
void do_pgr_biconnectedComponents(pgr_edge_t *data_edges, size_t total_edges, pgr_components_rt **return_tuples, size_t *return_count, char **log_msg, char **notice_msg, char **err_msg)
Definition:
biconnectedComponents_driver.cpp:45
pgr_free
T * pgr_free(T *ptr)
Definition:
pgr_alloc.hpp:77
pgrouting::graph::Pgr_base_graph
Definition:
pgr_base_graph.hpp:168
AssertFailedException
Extends std::exception and is the exception that we throw if an assert fails.
Definition:
pgr_assert.h:139
src
components
biconnectedComponents_driver.cpp
Generated on Tue May 25 2021 15:09:47 for PGROUTING by
1.8.17