From: Mikko Rasa Date: Sat, 29 Mar 2014 16:16:51 +0000 (+0200) Subject: Filter out non-viable routing steps before adding them to the list X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=524cce124fd8857483c28571c65f0a446d7be865;p=r2c2.git Filter out non-viable routing steps before adding them to the list --- diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index 1c7d996..c5519e4 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -146,7 +146,8 @@ void TrainRoutePlanner::add_steps(RoutingStep &step, unsigned train_index) if(next_entry_ep.has_path(i)) { next.trains[train_index].path = i; - new_steps.push_back(next); + if(next.is_viable()) + new_steps.push_back(next); } if(next_entry_ep.paths!=next_track->get_type().get_paths()) @@ -154,7 +155,8 @@ void TrainRoutePlanner::add_steps(RoutingStep &step, unsigned train_index) RoutingStep wait(&step); wait.advance(dt); wait.trains[train_index].state = WAITING; - new_steps.push_back(wait); + if(wait.is_viable()) + new_steps.push_back(wait); } } @@ -360,6 +362,15 @@ void TrainRoutePlanner::RoutingStep::advance(const Time::TimeDelta &dt) } } +bool TrainRoutePlanner::RoutingStep::is_viable() const +{ + for(vector::const_iterator i=trains.begin(); i!=trains.end(); ++i) + if(i->state==MOVING) + return true; + + return false; +} + bool TrainRoutePlanner::RoutingStep::is_goal() const { for(vector::const_iterator i=trains.begin(); i!=trains.end(); ++i) diff --git a/source/libr2c2/trainrouteplanner.h b/source/libr2c2/trainrouteplanner.h index 2ae7dc4..b241150 100644 --- a/source/libr2c2/trainrouteplanner.h +++ b/source/libr2c2/trainrouteplanner.h @@ -83,6 +83,7 @@ private: RoutingStep(RoutingStep *); void advance(const Msp::Time::TimeDelta &); + bool is_viable() const; bool is_goal() const; bool operator<(const RoutingStep &) const;