#ifndef OSRM_PARTITION_RENUMBER_HPP #define OSRM_PARTITION_RENUMBER_HPP #include "extractor/edge_based_node_segment.hpp" #include "extractor/node_data_container.hpp" #include "partition/bisection_to_partition.hpp" #include "partition/edge_based_graph.hpp" #include "util/dynamic_graph.hpp" #include "util/static_graph.hpp" namespace osrm { namespace partition { std::vector makePermutation(const DynamicEdgeBasedGraph &graph, const std::vector &partitions); template inline void renumber(util::DynamicGraph &graph, const std::vector &permutation) { // dynamic graph has own specilization graph.Renumber(permutation); } template inline void renumber(util::StaticGraph &graph, const std::vector &permutation) { // static graph has own specilization graph.Renumber(permutation); } inline void renumber(extractor::EdgeBasedNodeDataContainer &node_data_container, const std::vector &permutation) { node_data_container.Renumber(permutation); } inline void renumber(std::vector &partitions, const std::vector &permutation) { for (auto &partition : partitions) { util::inplacePermutation(partition.begin(), partition.end(), permutation); } } inline void renumber(util::vector_view &segments, const std::vector &permutation) { for (auto &segment : segments) { BOOST_ASSERT(segment.forward_segment_id.enabled); segment.forward_segment_id.id = permutation[segment.forward_segment_id.id]; if (segment.reverse_segment_id.enabled) segment.reverse_segment_id.id = permutation[segment.reverse_segment_id.id]; } } } } #endif