Make CoreCH SearchEngineData inherited from CH one

this allows to keep a single Algorithm template parameter in internal
interfaces as

template <typename Algorithm>
search(SearchEngineData<Algorithm> &,
       const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &, ...)
This commit is contained in:
Michael Krasnyk 2017-04-12 08:22:28 +02:00 committed by Patrick Niklaus
parent f96bae40ac
commit 59b70c4d11
10 changed files with 43 additions and 40 deletions

View File

@ -132,7 +132,7 @@ template <typename Algorithm> class Engine final : public EngineInterface
private: private:
std::unique_ptr<DataFacadeProvider<Algorithm>> facade_provider; std::unique_ptr<DataFacadeProvider<Algorithm>> facade_provider;
mutable SearchEngineData<typename RoutingAlgorithms<Algorithm>::HeapAlgorithm> heaps; mutable SearchEngineData<Algorithm> heaps;
const plugins::ViaRoutePlugin route_plugin; const plugins::ViaRoutePlugin route_plugin;
const plugins::TablePlugin table_plugin; const plugins::TablePlugin table_plugin;

View File

@ -57,16 +57,7 @@ class RoutingAlgorithmsInterface
template <typename Algorithm> class RoutingAlgorithms final : public RoutingAlgorithmsInterface template <typename Algorithm> class RoutingAlgorithms final : public RoutingAlgorithmsInterface
{ {
public: public:
// HeapAlgorithm is an explicit heap algorithm type to be used with Algorithm RoutingAlgorithms(SearchEngineData<Algorithm> &heaps,
// - CH algorithms use CH heap
// - CoreCH algorithms use CH heap
// - MLD algorithms use MLD heap
using HeapAlgorithm = typename std::conditional<
std::is_same<Algorithm, routing_algorithms::corech::Algorithm>::value,
routing_algorithms::ch::Algorithm,
Algorithm>::type;
RoutingAlgorithms(SearchEngineData<HeapAlgorithm> &heaps,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade) const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade)
: heaps(heaps), facade(facade) : heaps(heaps), facade(facade)
{ {
@ -131,7 +122,7 @@ template <typename Algorithm> class RoutingAlgorithms final : public RoutingAlgo
} }
private: private:
SearchEngineData<HeapAlgorithm> &heaps; SearchEngineData<Algorithm> &heaps;
// Owned by shared-ptr passed to the query // Owned by shared-ptr passed to the query
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade; const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade;

View File

@ -27,7 +27,7 @@ InternalRouteResult directShortestPathSearch(
const PhantomNodes &phantom_nodes); const PhantomNodes &phantom_nodes);
InternalRouteResult directShortestPathSearch( InternalRouteResult directShortestPathSearch(
SearchEngineData<ch::Algorithm> &engine_working_data, SearchEngineData<corech::Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade,
const PhantomNodes &phantom_nodes); const PhantomNodes &phantom_nodes);

View File

@ -22,8 +22,8 @@ static const constexpr double DEFAULT_GPS_PRECISION = 5;
//[1] "Hidden Markov Map Matching Through Noise and Sparseness"; //[1] "Hidden Markov Map Matching Through Noise and Sparseness";
// P. Newson and J. Krumm; 2009; ACM GIS // P. Newson and J. Krumm; 2009; ACM GIS
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
SubMatchingList mapMatching(SearchEngineData &engine_working_data, SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
const CandidateLists &candidates_list, const CandidateLists &candidates_list,
const std::vector<util::Coordinate> &trace_coordinates, const std::vector<util::Coordinate> &trace_coordinates,

View File

@ -13,9 +13,9 @@ namespace engine
namespace routing_algorithms namespace routing_algorithms
{ {
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
InternalRouteResult InternalRouteResult
shortestPathSearch(SearchEngineData &engine_working_data, shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
const std::vector<PhantomNodes> &phantom_nodes_vector, const std::vector<PhantomNodes> &phantom_nodes_vector,
const boost::optional<bool> continue_straight_at_waypoint); const boost::optional<bool> continue_straight_at_waypoint);

View File

@ -12,6 +12,12 @@ namespace osrm
namespace engine namespace engine
{ {
// Algorithm-dependent heaps
// - CH algorithms use CH heaps
// - CoreCH algorithms use CoreCH heaps that can be upcasted to CH heaps when CH algorithms reused
// by CoreCH at calling ch::routingStep, ch::retrievePackedPathFromSingleHeap and ch::unpackPath
// - MLD algorithms use MLD heaps
template <typename Algorithm> struct SearchEngineData template <typename Algorithm> struct SearchEngineData
{ {
}; };
@ -59,6 +65,12 @@ template <> struct SearchEngineData<routing_algorithms::ch::Algorithm>
void InitializeOrClearManyToManyThreadLocalStorage(unsigned number_of_nodes); void InitializeOrClearManyToManyThreadLocalStorage(unsigned number_of_nodes);
}; };
template <>
struct SearchEngineData<routing_algorithms::corech::Algorithm>
: public SearchEngineData<routing_algorithms::ch::Algorithm>
{
};
struct MultiLayerDijkstraHeapData struct MultiLayerDijkstraHeapData
{ {
NodeID parent; NodeID parent;

View File

@ -55,9 +55,9 @@ namespace detail
/// by the previous route. /// by the previous route.
/// This variation is only an optimazation for graphs with slow queries, for example /// This variation is only an optimazation for graphs with slow queries, for example
/// not fully contracted graphs. /// not fully contracted graphs.
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
InternalRouteResult directShortestPathSearchImpl( InternalRouteResult directShortestPathSearchImpl(
SearchEngineData &engine_working_data, SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
const PhantomNodes &phantom_nodes) const PhantomNodes &phantom_nodes)
{ {
@ -102,7 +102,7 @@ InternalRouteResult directShortestPathSearchImpl(
} // namespace ch } // namespace ch
InternalRouteResult directShortestPathSearch( InternalRouteResult directShortestPathSearch(
SearchEngineData<ch::Algorithm> &engine_working_data, SearchEngineData<corech::Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade,
const PhantomNodes &phantom_nodes) const PhantomNodes &phantom_nodes)
{ {

View File

@ -48,8 +48,8 @@ unsigned getMedianSampleTime(const std::vector<unsigned> &timestamps)
} }
} }
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
SubMatchingList mapMatching(SearchEngineData &engine_working_data, SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
const CandidateLists &candidates_list, const CandidateLists &candidates_list,
const std::vector<util::Coordinate> &trace_coordinates, const std::vector<util::Coordinate> &trace_coordinates,
@ -426,7 +426,7 @@ mapMatching(SearchEngineData<ch::Algorithm> &engine_working_data,
const bool allow_splitting); const bool allow_splitting);
template SubMatchingList template SubMatchingList
mapMatching(SearchEngineData<ch::Algorithm> &engine_working_data, mapMatching(SearchEngineData<corech::Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade,
const CandidateLists &candidates_list, const CandidateLists &candidates_list,
const std::vector<util::Coordinate> &trace_coordinates, const std::vector<util::Coordinate> &trace_coordinates,

View File

@ -221,10 +221,10 @@ namespace corech
// && source_phantom.GetForwardWeightPlusOffset() > target_phantom.GetForwardWeightPlusOffset()) // && source_phantom.GetForwardWeightPlusOffset() > target_phantom.GetForwardWeightPlusOffset())
// requires // requires
// a force loop, if the heaps have been initialized with positive offsets. // a force loop, if the heaps have been initialized with positive offsets.
void search(SearchEngineData<ch::Algorithm> &engine_working_data, void search(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
SearchEngineData<ch::Algorithm>::QueryHeap &forward_heap, SearchEngineData<Algorithm>::QueryHeap &forward_heap,
SearchEngineData<ch::Algorithm>::QueryHeap &reverse_heap, SearchEngineData<Algorithm>::QueryHeap &reverse_heap,
EdgeWeight &weight, EdgeWeight &weight,
std::vector<NodeID> &packed_leg, std::vector<NodeID> &packed_leg,
const bool force_loop_forward, const bool force_loop_forward,
@ -401,10 +401,10 @@ void search(SearchEngineData<ch::Algorithm> &engine_working_data,
// Requires the heaps for be empty // Requires the heaps for be empty
// If heaps should be adjusted to be initialized outside of this function, // If heaps should be adjusted to be initialized outside of this function,
// the addition of force_loop parameters might be required // the addition of force_loop parameters might be required
double getNetworkDistance(SearchEngineData<ch::Algorithm> &engine_working_data, double getNetworkDistance(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
SearchEngineData<ch::Algorithm>::QueryHeap &forward_heap, SearchEngineData<Algorithm>::QueryHeap &forward_heap,
SearchEngineData<ch::Algorithm>::QueryHeap &reverse_heap, SearchEngineData<Algorithm>::QueryHeap &reverse_heap,
const PhantomNode &source_phantom, const PhantomNode &source_phantom,
const PhantomNode &target_phantom, const PhantomNode &target_phantom,
EdgeWeight weight_upper_bound) EdgeWeight weight_upper_bound)

View File

@ -20,11 +20,11 @@ const static constexpr bool DO_NOT_FORCE_LOOP = false;
// allows a uturn at the target_phantom // allows a uturn at the target_phantom
// searches source forward/reverse -> target forward/reverse // searches source forward/reverse -> target forward/reverse
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
void searchWithUTurn(SearchEngineData &engine_working_data, void searchWithUTurn(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
typename SearchEngineData::QueryHeap &forward_heap, typename SearchEngineData<Algorithm>::QueryHeap &forward_heap,
typename SearchEngineData::QueryHeap &reverse_heap, typename SearchEngineData<Algorithm>::QueryHeap &reverse_heap,
const bool search_from_forward_node, const bool search_from_forward_node,
const bool search_from_reverse_node, const bool search_from_reverse_node,
const bool search_to_forward_node, const bool search_to_forward_node,
@ -94,11 +94,11 @@ void searchWithUTurn(SearchEngineData &engine_working_data,
// searches shortest path between: // searches shortest path between:
// source forward/reverse -> target forward // source forward/reverse -> target forward
// source forward/reverse -> target reverse // source forward/reverse -> target reverse
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
void search(SearchEngineData &engine_working_data, void search(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
typename SearchEngineData::QueryHeap &forward_heap, typename SearchEngineData<Algorithm>::QueryHeap &forward_heap,
typename SearchEngineData::QueryHeap &reverse_heap, typename SearchEngineData<Algorithm>::QueryHeap &reverse_heap,
const bool search_from_forward_node, const bool search_from_forward_node,
const bool search_from_reverse_node, const bool search_from_reverse_node,
const bool search_to_forward_node, const bool search_to_forward_node,
@ -215,9 +215,9 @@ void unpackLegs(const datafacade::ContiguousInternalMemoryDataFacade<Algorithm>
} }
} }
template <typename Algorithm, typename SearchEngineData> template <typename Algorithm>
InternalRouteResult InternalRouteResult
shortestPathSearch(SearchEngineData &engine_working_data, shortestPathSearch(SearchEngineData<Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<Algorithm> &facade,
const std::vector<PhantomNodes> &phantom_nodes_vector, const std::vector<PhantomNodes> &phantom_nodes_vector,
const boost::optional<bool> continue_straight_at_waypoint) const boost::optional<bool> continue_straight_at_waypoint)
@ -474,7 +474,7 @@ shortestPathSearch(SearchEngineData<ch::Algorithm> &engine_working_data,
const boost::optional<bool> continue_straight_at_waypoint); const boost::optional<bool> continue_straight_at_waypoint);
template InternalRouteResult template InternalRouteResult
shortestPathSearch(SearchEngineData<ch::Algorithm> &engine_working_data, shortestPathSearch(SearchEngineData<corech::Algorithm> &engine_working_data,
const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade, const datafacade::ContiguousInternalMemoryDataFacade<corech::Algorithm> &facade,
const std::vector<PhantomNodes> &phantom_nodes_vector, const std::vector<PhantomNodes> &phantom_nodes_vector,
const boost::optional<bool> continue_straight_at_waypoint); const boost::optional<bool> continue_straight_at_waypoint);