+void TrainRouter::add_waypoint(const TrackChain &wp)
+{
+ waypoints.push_back(&wp);
+ destination_changed = true;
+ metrics_stale = true;
+}
+
+bool TrainRouter::is_waypoint(unsigned index, Track &track) const
+{
+ if(index>=waypoints.size())
+ throw out_of_range("TrainRouter::is_waypoint");
+
+ return waypoints[index]->has_track(track);
+}
+
+const TrainRouteMetric &TrainRouter::get_metric(int index) const
+{
+ if(!destination)
+ throw logic_error("no metrics");
+ else if(metrics_stale)
+ throw logic_error("metrics are stale");
+
+ if(index<0)
+ return *metrics.front();
+ else if(static_cast<unsigned>(index)>=waypoints.size())
+ throw out_of_range("TrainRouter::get_metric");
+ else
+ return *metrics[index+1];
+}
+
+void TrainRouter::set_departure_delay(const Time::TimeDelta &d)
+{
+ delay = d;
+ destination_changed = true;
+}
+