refactor AlternativePathRouting step to have the same interface semantics regardless of search direction
This commit is contained in:
parent
25c52b7482
commit
a1d4798ded
@ -156,7 +156,7 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
}
|
}
|
||||||
if (0 < reverse_heap1.Size())
|
if (0 < reverse_heap1.Size())
|
||||||
{
|
{
|
||||||
AlternativeRoutingStep<false>(reverse_heap1, forward_heap1, &middle_node,
|
AlternativeRoutingStep<false>(forward_heap1, reverse_heap1, &middle_node,
|
||||||
&upper_bound_to_shortest_path_distance,
|
&upper_bound_to_shortest_path_distance,
|
||||||
via_node_candidate_list, reverse_search_space,
|
via_node_candidate_list, reverse_search_space,
|
||||||
min_edge_offset);
|
min_edge_offset);
|
||||||
@ -351,13 +351,13 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// unpack alternate <s,..,v,..,t> by exploring search spaces from v
|
// unpack alternate <s,..,v,..,t> by exploring search spaces from v
|
||||||
inline void RetrievePackedAlternatePath(const QueryHeap &forward_heap1,
|
void RetrievePackedAlternatePath(const QueryHeap &forward_heap1,
|
||||||
const QueryHeap &reverse_heap1,
|
const QueryHeap &reverse_heap1,
|
||||||
const QueryHeap &forward_heap2,
|
const QueryHeap &forward_heap2,
|
||||||
const QueryHeap &reverse_heap2,
|
const QueryHeap &reverse_heap2,
|
||||||
const NodeID s_v_middle,
|
const NodeID s_v_middle,
|
||||||
const NodeID v_t_middle,
|
const NodeID v_t_middle,
|
||||||
std::vector<NodeID> &packed_path) const
|
std::vector<NodeID> &packed_path) const
|
||||||
{
|
{
|
||||||
// fetch packed path [s,v)
|
// fetch packed path [s,v)
|
||||||
std::vector<NodeID> packed_v_t_path;
|
std::vector<NodeID> packed_v_t_path;
|
||||||
@ -375,11 +375,11 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
// compute and unpack <s,..,v> and <v,..,t> by exploring search spaces
|
// compute and unpack <s,..,v> and <v,..,t> by exploring search spaces
|
||||||
// from v and intersecting against queues. only half-searches have to be
|
// from v and intersecting against queues. only half-searches have to be
|
||||||
// done at this stage
|
// done at this stage
|
||||||
inline void ComputeLengthAndSharingOfViaPath(const NodeID via_node,
|
void ComputeLengthAndSharingOfViaPath(const NodeID via_node,
|
||||||
int *real_length_of_via_path,
|
int *real_length_of_via_path,
|
||||||
int *sharing_of_via_path,
|
int *sharing_of_via_path,
|
||||||
const std::vector<NodeID> &packed_shortest_path,
|
const std::vector<NodeID> &packed_shortest_path,
|
||||||
const EdgeWeight min_edge_offset)
|
const EdgeWeight min_edge_offset)
|
||||||
{
|
{
|
||||||
engine_working_data.InitializeOrClearSecondThreadLocalStorage(
|
engine_working_data.InitializeOrClearSecondThreadLocalStorage(
|
||||||
super::facade->GetNumberOfNodes());
|
super::facade->GetNumberOfNodes());
|
||||||
@ -522,7 +522,7 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
// variable
|
// variable
|
||||||
}
|
}
|
||||||
|
|
||||||
// inline int approximateAmountOfSharing(
|
// int approximateAmountOfSharing(
|
||||||
// const NodeID alternate_path_middle_node_id,
|
// const NodeID alternate_path_middle_node_id,
|
||||||
// QueryHeap & forward_heap,
|
// QueryHeap & forward_heap,
|
||||||
// QueryHeap & reverse_heap,
|
// QueryHeap & reverse_heap,
|
||||||
@ -569,14 +569,17 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
|
|
||||||
// todo: reorder parameters
|
// todo: reorder parameters
|
||||||
template <bool is_forward_directed>
|
template <bool is_forward_directed>
|
||||||
inline void AlternativeRoutingStep(QueryHeap &forward_heap,
|
void AlternativeRoutingStep(QueryHeap &heap1,
|
||||||
QueryHeap &reverse_heap,
|
QueryHeap &heap2,
|
||||||
NodeID *middle_node,
|
NodeID *middle_node,
|
||||||
int *upper_bound_to_shortest_path_distance,
|
int *upper_bound_to_shortest_path_distance,
|
||||||
std::vector<NodeID> &search_space_intersection,
|
std::vector<NodeID> &search_space_intersection,
|
||||||
std::vector<SearchSpaceEdge> &search_space,
|
std::vector<SearchSpaceEdge> &search_space,
|
||||||
const EdgeWeight min_edge_offset) const
|
const EdgeWeight min_edge_offset) const
|
||||||
{
|
{
|
||||||
|
QueryHeap &forward_heap = (is_forward_directed ? heap1 : heap2);
|
||||||
|
QueryHeap &reverse_heap = (is_forward_directed ? heap2 : heap1);
|
||||||
|
|
||||||
const NodeID node = forward_heap.DeleteMin();
|
const NodeID node = forward_heap.DeleteMin();
|
||||||
const int distance = forward_heap.GetKey(node);
|
const int distance = forward_heap.GetKey(node);
|
||||||
// const NodeID parentnode = forward_heap.GetData(node).parent;
|
// const NodeID parentnode = forward_heap.GetData(node).parent;
|
||||||
@ -645,16 +648,16 @@ class AlternativeRouting final : private BasicRoutingInterface<DataFacadeT>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// conduct T-Test
|
// conduct T-Test
|
||||||
inline bool ViaNodeCandidatePassesTTest(QueryHeap &existing_forward_heap,
|
bool ViaNodeCandidatePassesTTest(QueryHeap &existing_forward_heap,
|
||||||
QueryHeap &existing_reverse_heap,
|
QueryHeap &existing_reverse_heap,
|
||||||
QueryHeap &new_forward_heap,
|
QueryHeap &new_forward_heap,
|
||||||
QueryHeap &new_reverse_heap,
|
QueryHeap &new_reverse_heap,
|
||||||
const RankedCandidateNode &candidate,
|
const RankedCandidateNode &candidate,
|
||||||
const int length_of_shortest_path,
|
const int length_of_shortest_path,
|
||||||
int *length_of_via_path,
|
int *length_of_via_path,
|
||||||
NodeID *s_v_middle,
|
NodeID *s_v_middle,
|
||||||
NodeID *v_t_middle,
|
NodeID *v_t_middle,
|
||||||
const EdgeWeight min_edge_offset) const
|
const EdgeWeight min_edge_offset) const
|
||||||
{
|
{
|
||||||
new_forward_heap.Clear();
|
new_forward_heap.Clear();
|
||||||
new_reverse_heap.Clear();
|
new_reverse_heap.Clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user