2015-07-04 18:15:55 -04:00
|
|
|
#ifndef MATRIX_GRAPH_WRAPPER_H
|
|
|
|
#define MATRIX_GRAPH_WRAPPER_H
|
|
|
|
|
2015-08-28 14:18:15 -04:00
|
|
|
#include <cstddef>
|
|
|
|
#include <iterator>
|
2016-05-27 15:05:04 -04:00
|
|
|
#include <vector>
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "util/typedefs.hpp"
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2016-01-05 10:51:13 -05:00
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace util
|
|
|
|
{
|
|
|
|
|
2016-01-07 19:31:57 -05:00
|
|
|
// This Wrapper provides all methods that are needed for extractor::TarjanSCC, when the graph is
|
2017-02-10 05:13:20 -05:00
|
|
|
// given in a matrix representation (e.g. as output from a distance table call)
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2015-08-28 14:18:15 -04:00
|
|
|
template <typename T> class MatrixGraphWrapper
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
MatrixGraphWrapper(std::vector<T> table, const std::size_t number_of_nodes)
|
2016-05-27 15:05:04 -04:00
|
|
|
: table_(std::move(table)), number_of_nodes_(number_of_nodes)
|
|
|
|
{
|
|
|
|
}
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2015-08-28 14:18:15 -04:00
|
|
|
std::size_t GetNumberOfNodes() const { return number_of_nodes_; }
|
|
|
|
|
|
|
|
std::vector<T> GetAdjacentEdgeRange(const NodeID node) const
|
|
|
|
{
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2015-08-19 13:44:11 -04:00
|
|
|
std::vector<T> edges;
|
2015-08-28 14:18:15 -04:00
|
|
|
// find all valid adjacent edges and move to vector `edges`
|
|
|
|
for (std::size_t i = 0; i < number_of_nodes_; ++i)
|
|
|
|
{
|
|
|
|
if (*(std::begin(table_) + node * number_of_nodes_ + i) != INVALID_EDGE_WEIGHT)
|
|
|
|
{
|
2015-08-19 13:44:11 -04:00
|
|
|
edges.push_back(i);
|
|
|
|
}
|
|
|
|
}
|
2015-07-04 18:15:55 -04:00
|
|
|
return edges;
|
|
|
|
}
|
|
|
|
|
2015-08-28 14:18:15 -04:00
|
|
|
EdgeWeight GetTarget(const EdgeWeight edge) const { return edge; }
|
2015-07-04 18:15:55 -04:00
|
|
|
|
2015-08-28 14:18:15 -04:00
|
|
|
private:
|
|
|
|
const std::vector<T> table_;
|
2015-08-19 08:04:59 -04:00
|
|
|
const std::size_t number_of_nodes_;
|
2015-07-04 18:15:55 -04:00
|
|
|
};
|
2016-01-05 10:51:13 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-04 18:15:55 -04:00
|
|
|
#endif // MATRIX_GRAPH_WRAPPER_H
|