From 528c4f8760ac54fb2d1f3002248ecf6774956030 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 20 Feb 2015 18:11:41 +0200 Subject: [PATCH] Move duplicated successor step creation code to a function --- source/libr2c2/trainrouteplanner.cpp | 26 ++++++++++++++------------ source/libr2c2/trainrouteplanner.h | 1 + 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index 75d746b..b6d2f07 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -519,23 +519,14 @@ void TrainRoutePlanner::RoutingStep::create_successors(list &new_st const TrackType::Endpoint &entry_ep = train.track.endpoint(); if(train.critical) { - train.path = train.track->get_type().coerce_path(train.track.entry(), train.track->get_active_path()); - train.update_estimate(); - next.update_estimate(); - if(next.is_viable()) - new_steps.push_back(next); + unsigned critical_path = train.track->get_type().coerce_path(train.track.entry(), train.track->get_active_path()); + create_successor(next, train_index, critical_path, new_steps); } else { for(unsigned i=0; entry_ep.paths>>i; ++i) if(entry_ep.has_path(i)) - { - train.path = i; - train.update_estimate(); - next.update_estimate(); - if(next.is_viable()) - new_steps.push_back(next); - } + create_successor(next, train_index, i, new_steps); } new_steps.sort(); @@ -557,6 +548,17 @@ void TrainRoutePlanner::RoutingStep::create_successors(list &new_st } } +void TrainRoutePlanner::RoutingStep::create_successor(RoutingStep &next, unsigned train_index, unsigned path, list &new_steps) +{ + TrainRoutingState &train = next.trains[train_index]; + + train.path = path; + train.update_estimate(); + next.update_estimate(); + if(next.is_viable()) + new_steps.push_back(next); +} + bool TrainRoutePlanner::RoutingStep::update_states() { bool changes = false; diff --git a/source/libr2c2/trainrouteplanner.h b/source/libr2c2/trainrouteplanner.h index e3d3770..3076c39 100644 --- a/source/libr2c2/trainrouteplanner.h +++ b/source/libr2c2/trainrouteplanner.h @@ -109,6 +109,7 @@ private: RoutingStep(const RoutingStep *); void create_successors(std::list &) const; + static void create_successor(RoutingStep &, unsigned, unsigned, std::list &); bool update_states(); bool check_deadlocks() const; int get_occupant(Track &) const; -- 2.43.0