2017-01-13 02:32:17 -05:00
|
|
|
#ifndef OSRM_CONTRACTOR_GRAPH_CONTRACTION_ADAPTORS_HPP_
|
|
|
|
#define OSRM_CONTRACTOR_GRAPH_CONTRACTION_ADAPTORS_HPP_
|
|
|
|
|
|
|
|
#include "contractor/contractor_graph.hpp"
|
|
|
|
#include "util/log.hpp"
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace contractor
|
|
|
|
{
|
|
|
|
|
|
|
|
// Make sure to move in the input edge list!
|
|
|
|
template <typename InputEdgeContainer>
|
|
|
|
std::vector<ContractorEdge> adaptToContractorInput(InputEdgeContainer input_edge_list)
|
|
|
|
{
|
|
|
|
std::vector<ContractorEdge> edges;
|
|
|
|
edges.reserve(input_edge_list.size() * 2);
|
|
|
|
|
|
|
|
for (const auto &input_edge : input_edge_list)
|
|
|
|
{
|
2017-03-14 21:34:27 -04:00
|
|
|
if (input_edge.data.weight == INVALID_EDGE_WEIGHT)
|
|
|
|
continue;
|
|
|
|
|
2017-01-13 02:32:17 -05:00
|
|
|
#ifndef NDEBUG
|
|
|
|
const unsigned int constexpr DAY_IN_DECI_SECONDS = 24 * 60 * 60 * 10;
|
2017-03-06 17:00:11 -05:00
|
|
|
if (static_cast<unsigned int>(std::max(input_edge.data.weight, 1)) > DAY_IN_DECI_SECONDS)
|
2017-01-13 02:32:17 -05:00
|
|
|
{
|
|
|
|
util::Log(logWARNING) << "Edge weight large -> "
|
2017-03-06 17:00:11 -05:00
|
|
|
<< static_cast<unsigned int>(std::max(input_edge.data.weight, 1))
|
2017-01-13 02:32:17 -05:00
|
|
|
<< " : " << static_cast<unsigned int>(input_edge.source) << " -> "
|
|
|
|
<< static_cast<unsigned int>(input_edge.target);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
edges.emplace_back(input_edge.source,
|
|
|
|
input_edge.target,
|
2017-03-06 17:00:11 -05:00
|
|
|
std::max(input_edge.data.weight, 1),
|
|
|
|
input_edge.data.duration,
|
2017-01-13 02:32:17 -05:00
|
|
|
1,
|
2017-03-10 04:57:07 -05:00
|
|
|
input_edge.data.turn_id,
|
2017-01-13 02:32:17 -05:00
|
|
|
false,
|
2017-03-06 17:00:11 -05:00
|
|
|
input_edge.data.forward ? true : false,
|
|
|
|
input_edge.data.backward ? true : false);
|
2017-01-13 02:32:17 -05:00
|
|
|
|
|
|
|
edges.emplace_back(input_edge.target,
|
|
|
|
input_edge.source,
|
2017-03-06 17:00:11 -05:00
|
|
|
std::max(input_edge.data.weight, 1),
|
|
|
|
input_edge.data.duration,
|
2017-01-13 02:32:17 -05:00
|
|
|
1,
|
2017-03-10 04:57:07 -05:00
|
|
|
input_edge.data.turn_id,
|
2017-01-13 02:32:17 -05:00
|
|
|
false,
|
2017-03-06 17:00:11 -05:00
|
|
|
input_edge.data.backward ? true : false,
|
|
|
|
input_edge.data.forward ? true : false);
|
2017-01-13 02:32:17 -05:00
|
|
|
}
|
|
|
|
// FIXME not sure if we need this
|
|
|
|
edges.shrink_to_fit();
|
|
|
|
return edges;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace contractor
|
|
|
|
} // namespace osrm
|
|
|
|
|
|
|
|
#endif // OSRM_CONTRACTOR_GRAPH_CONTRACTION_ADAPTORS_HPP_
|