+ while(1)
+ {
+ TrackIter next = t_iter.next();
+ if(!next)
+ break;
+
+ if(!wp.chain->has_track(*next))
+ {
+ if(wp.direction!=TrackChain::UNSPECIFIED)
+ if(t_iter!=wp.chain->iter_for(*t_iter, wp.direction))
+ break;
+
+ if(waypoints.size()==1)
+ {
+ if(state==RESERVED_TO_END)
+ state = ADVANCED_TO_END;
+ }
+ else
+ {
+ const TrackChain *chain = wp.chain;
+ waypoints.erase(waypoints.begin());
+ metrics_stale = true;
+ signal_waypoint_reached.emit(chain);
+ signal_event.emit(Message("waypoint-reached", chain));
+ }
+ break;
+ }
+ else if(!block.has_track(*next))
+ break;
+
+ t_iter = next;
+ }