-unsigned Track::traverse(unsigned i, unsigned path) const
-{
- const vector<Endpoint> &eps = type.get_endpoints();
- if(i>=eps.size())
- throw InvalidParameterValue("Endpoint index out of range");
-
- const Endpoint &ep = eps[i];
-
- if(ep.paths&(1<<path))
- {
- // Find the other endpoint for this path
- for(unsigned j=0; j<eps.size(); ++j)
- if((eps[j].paths&(1<<path)) && j!=i)
- return j;
- }
- else
- {
- // Find an endpoint that's connected to this one and has the requested path
- for(unsigned j=0; j<eps.size(); ++j)
- if((eps[j].paths&(1<<path)) && (eps[j].paths&ep.paths))
- return j;
- }
-
- throw Exception("Track endpoint did not have a counterpart");
-}
-