#include "engine/search_engine_data.hpp" namespace osrm { namespace engine { // CH heaps using CH = routing_algorithms::ch::Algorithm; SearchEngineData::SearchEngineHeapPtr SearchEngineData::forward_heap_1; SearchEngineData::SearchEngineHeapPtr SearchEngineData::reverse_heap_1; SearchEngineData::SearchEngineHeapPtr SearchEngineData::forward_heap_2; SearchEngineData::SearchEngineHeapPtr SearchEngineData::reverse_heap_2; SearchEngineData::SearchEngineHeapPtr SearchEngineData::forward_heap_3; SearchEngineData::SearchEngineHeapPtr SearchEngineData::reverse_heap_3; SearchEngineData::ManyToManyHeapPtr SearchEngineData::many_to_many_heap; void SearchEngineData::InitializeOrClearFirstThreadLocalStorage(unsigned number_of_nodes) { if (forward_heap_1.get()) { forward_heap_1->Clear(); } else { forward_heap_1.reset(new QueryHeap(number_of_nodes)); } if (reverse_heap_1.get()) { reverse_heap_1->Clear(); } else { reverse_heap_1.reset(new QueryHeap(number_of_nodes)); } } void SearchEngineData::InitializeOrClearSecondThreadLocalStorage(unsigned number_of_nodes) { if (forward_heap_2.get()) { forward_heap_2->Clear(); } else { forward_heap_2.reset(new QueryHeap(number_of_nodes)); } if (reverse_heap_2.get()) { reverse_heap_2->Clear(); } else { reverse_heap_2.reset(new QueryHeap(number_of_nodes)); } } void SearchEngineData::InitializeOrClearThirdThreadLocalStorage(unsigned number_of_nodes) { if (forward_heap_3.get()) { forward_heap_3->Clear(); } else { forward_heap_3.reset(new QueryHeap(number_of_nodes)); } if (reverse_heap_3.get()) { reverse_heap_3->Clear(); } else { reverse_heap_3.reset(new QueryHeap(number_of_nodes)); } } void SearchEngineData::InitializeOrClearManyToManyThreadLocalStorage(unsigned number_of_nodes) { if (many_to_many_heap.get()) { many_to_many_heap->Clear(); } else { many_to_many_heap.reset(new ManyToManyQueryHeap(number_of_nodes)); } } // MLD using MLD = routing_algorithms::mld::Algorithm; SearchEngineData::SearchEngineHeapPtr SearchEngineData::forward_heap_1; SearchEngineData::SearchEngineHeapPtr SearchEngineData::reverse_heap_1; SearchEngineData::ManyToManyHeapPtr SearchEngineData::many_to_many_heap; void SearchEngineData::InitializeOrClearFirstThreadLocalStorage( unsigned number_of_nodes, unsigned number_of_boundary_nodes) { if (forward_heap_1.get()) { forward_heap_1->Clear(); } else { forward_heap_1.reset(new QueryHeap(number_of_nodes, number_of_boundary_nodes)); } if (reverse_heap_1.get()) { reverse_heap_1->Clear(); } else { reverse_heap_1.reset(new QueryHeap(number_of_nodes, number_of_boundary_nodes)); } } void SearchEngineData::InitializeOrClearManyToManyThreadLocalStorage( unsigned number_of_nodes, unsigned number_of_boundary_nodes) { if (many_to_many_heap.get()) { many_to_many_heap->Clear(); } else { many_to_many_heap.reset(new ManyToManyQueryHeap(number_of_nodes, number_of_boundary_nodes)); } } } // namespace engine } // namespace osrm