/*PGR-GNU*****************************************************************
File: astarOneToOne_driver.cpp
Generated with Template by:
Copyright (c) 2015 pgRouting developers
Mail: project@pgrouting.org
Function's developer:
Copyright (c) 2015 Celia Virginia Vergara Castillo
Mail:
------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
********************************************************************PGR-GNU*/
#include "drivers/astar/astar_driver.h"
#include
#include
#include
#include
#include "astar/pgr_astar.hpp"
#include "cpp_common/pgr_alloc.hpp"
#include "cpp_common/pgr_assert.h"
template < class G >
std::deque
pgr_astar(
G &graph,
std::vector sources,
std::vector targets,
int heuristic,
double factor,
double epsilon,
bool only_cost,
bool normal) {
std::sort(sources.begin(), sources.end());
sources.erase(
std::unique(sources.begin(), sources.end()),
sources.end());
std::sort(targets.begin(), targets.end());
targets.erase(
std::unique(targets.begin(), targets.end()),
targets.end());
pgrouting::algorithms::Pgr_astar< G > fn_astar;
auto paths = fn_astar.astar(graph, sources, targets,
heuristic, factor, epsilon, only_cost);
if (!normal) {
for (auto &path : paths) {
path.reverse();
}
}
return paths;
}
/************************************************************
edges_sql TEXT,
vertex_table TEXT,
start_vid BIGINT,
end_vid BIGINT directed BOOLEAN DEFAULT true,
***********************************************************/
void do_pgr_astarManyToMany(
Pgr_edge_xy_t *edges, size_t total_edges,
int64_t *start_vidsArr, size_t size_start_vidsArr,
int64_t *end_vidsArr, size_t size_end_vidsArr,
bool directed,
int heuristic,
double factor,
double epsilon,
bool only_cost,
bool normal,
General_path_element_t **return_tuples,
size_t *return_count,
char** log_msg,
char** notice_msg,
char** err_msg) {
std::ostringstream log;
std::ostringstream notice;
std::ostringstream err;
try {
pgassert(!(*log_msg));
pgassert(!(*err_msg));
pgassert(!(*return_tuples));
pgassert(*return_count == 0);
pgassert(total_edges != 0);
log end_vids(
end_vidsArr,
end_vidsArr + size_end_vidsArr);
std::vector< int64_t > start_vids(
start_vidsArr,
start_vidsArr + size_start_vidsArr);
graphType gType = directed? DIRECTED: UNDIRECTED;
std::deque< Path >paths;
if (directed) {
log