summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pathfinder/yapf/yapf_base.hpp9
-rw-r--r--src/pathfinder/yapf/yapf_costrail.hpp2
2 files changed, 7 insertions, 4 deletions
diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp
index b34e40a67..41c38ab34 100644
--- a/src/pathfinder/yapf/yapf_base.hpp
+++ b/src/pathfinder/yapf/yapf_base.hpp
@@ -207,11 +207,14 @@ public:
* remain the best intermediate node, and thus the vehicle would still
* go towards the red EOL signal.
*/
- void PruneIntermediateNodeBranch()
+ void PruneIntermediateNodeBranch(Node *n)
{
- while (Yapf().m_pBestIntermediateNode != nullptr && (Yapf().m_pBestIntermediateNode->m_segment->m_end_segment_reason & ESRB_CHOICE_FOLLOWS) == 0) {
- Yapf().m_pBestIntermediateNode = Yapf().m_pBestIntermediateNode->m_parent;
+ bool intermediate_on_branch = false;
+ while (n != nullptr && (n->m_segment->m_end_segment_reason & ESRB_CHOICE_FOLLOWS) == 0) {
+ if (n == Yapf().m_pBestIntermediateNode) intermediate_on_branch = true;
+ n = n->m_parent;
}
+ if (intermediate_on_branch) Yapf().m_pBestIntermediateNode = n;
}
/**
diff --git a/src/pathfinder/yapf/yapf_costrail.hpp b/src/pathfinder/yapf/yapf_costrail.hpp
index b50300b61..908814c8c 100644
--- a/src/pathfinder/yapf/yapf_costrail.hpp
+++ b/src/pathfinder/yapf/yapf_costrail.hpp
@@ -199,7 +199,7 @@ public:
* was it first signal which is two-way? */
if (!IsPbsSignal(sig_type) && Yapf().TreatFirstRedTwoWaySignalAsEOL() && n.flags_u.flags_s.m_choice_seen && has_signal_against && n.m_num_signals_passed == 0) {
/* yes, the first signal is two-way red signal => DEAD END. Prune this branch... */
- Yapf().PruneIntermediateNodeBranch();
+ Yapf().PruneIntermediateNodeBranch(&n);
n.m_segment->m_end_segment_reason |= ESRB_DEAD_END;
Yapf().m_stopped_on_first_two_way_signal = true;
return -1;