#ifndef SEARCH_ENGINE_DATA_HPP #define SEARCH_ENGINE_DATA_HPP #include #include "partition/multi_level_partition.hpp" #include "util/binary_heap.hpp" #include "util/typedefs.hpp" namespace osrm { namespace engine { struct HeapData { NodeID parent; /* explicit */ HeapData(NodeID p) : parent(p) {} }; struct ManyToManyHeapData : HeapData { EdgeWeight duration; ManyToManyHeapData(NodeID p, EdgeWeight duration) : HeapData(p), duration(duration) {} }; struct MultiLayerDijkstraHeapData : HeapData { bool from_clique_arc; MultiLayerDijkstraHeapData(NodeID p) : HeapData(p), from_clique_arc(false) {} MultiLayerDijkstraHeapData(NodeID p, bool from) : HeapData(p), from_clique_arc(from) {} }; struct SearchEngineData { using QueryHeap = util:: BinaryHeap>; using SearchEngineHeapPtr = boost::thread_specific_ptr; using ManyToManyQueryHeap = util::BinaryHeap>; using ManyToManyHeapPtr = boost::thread_specific_ptr; using MultiLayerDijkstraHeap = util::BinaryHeap>; using MultiLayerDijkstraHeapPtr = boost::thread_specific_ptr; static SearchEngineHeapPtr forward_heap_1; static SearchEngineHeapPtr reverse_heap_1; static SearchEngineHeapPtr forward_heap_2; static SearchEngineHeapPtr reverse_heap_2; static SearchEngineHeapPtr forward_heap_3; static SearchEngineHeapPtr reverse_heap_3; static ManyToManyHeapPtr many_to_many_heap; static MultiLayerDijkstraHeapPtr mld_forward_heap; static MultiLayerDijkstraHeapPtr mld_reverse_heap; void InitializeOrClearFirstThreadLocalStorage(const unsigned number_of_nodes); void InitializeOrClearSecondThreadLocalStorage(const unsigned number_of_nodes); void InitializeOrClearThirdThreadLocalStorage(const unsigned number_of_nodes); void InitializeOrClearManyToManyThreadLocalStorage(const unsigned number_of_nodes); void InitializeOrClearMultiLayerDijkstraThreadLocalStorage(const unsigned number_of_nodes); }; } } #endif // SEARCH_ENGINE_DATA_HPP