- if((*i)->get_flex())
- flext.push_back(*i);
- else
- {
- for(set<Track *>::iterator j=i; j!=tracks.end(); ++j)
- if(j!=i)
- (*i)->snap_to(**j, true);
- }
- }
-
- for(list<Track *>::iterator i=flext.begin(); i!=flext.end(); ++i)
- for(set<Track *>::iterator j=tracks.begin(); j!=tracks.end(); ++j)
- if(*j!=*i)
- (*i)->snap_to(**j, true);
-}
-
-void Layout::check_routes()
-{
- for(map<string, Route *>::iterator i=routes.begin(); i!=routes.end(); ++i)
- {
- /* We must copy the turnout map, since adding tracks to the route will
- (temporarily) mess it up */
- const map<unsigned, int> turnouts = i->second->get_turnouts();
-
- // Find any turnout in the route
- Track *track = 0;
- unsigned trk_path = 0;
- for(set<Track *>::const_iterator j=tracks.begin(); j!=tracks.end(); ++j)
- {
- map<unsigned, int>::const_iterator k = turnouts.find((*j)->get_turnout_id());
- if(k!=turnouts.end())
- {
- track = *j;
- trk_path = k->second;
- break;
- }
- }
-
- if(!track)
- continue;
-
- // Find an applicable endpoint
- const vector<Endpoint> &eps = track->get_type().get_endpoints();
- unsigned ep = 0;
- for(unsigned j=0; j<eps.size(); ++j)
- if(eps[j].paths&(1<<trk_path))