- visited.insert(&track);
-
- const vector<Marklin::Endpoint> &eps = track.get_type().get_endpoints();
- for(unsigned i=0; i<eps.size(); ++i)
- {
- if(i==track_ep) continue;
- Track *link = track.get_link(i);
- if(!link) continue;
- if(visited.count(link)) continue;
- if(!(eps[i].paths&eps[track_ep].paths)) continue;
-
- if(tracks.count(link))
- find_paths(*link, link->get_endpoint_by_link(track), path, visited);
- else
+ unsigned mask = track->get_type().get_endpoints()[track.entry()].paths;
+ for(unsigned i=0; mask>>i; ++i)
+ if(mask&(1<<i))