#include "layout.h"
#include "route.h"
#include "track.h"
+#include "trackiter.h"
#include "tracktype.h"
using namespace std;
void Route::add_track_chain(Track &start, unsigned ep, const TurnoutMap &trnts)
{
- Track *track = &start;
- while(1)
+ TrackIter iter(&start, ep);
+ while(iter)
{
- if(track->get_type().is_dead_end())
+ if(iter->get_type().is_dead_end())
break;
- if(tracks.count(track))
+ if(has_track(*iter))
break;
int path = 0;
- if(track->get_turnout_id())
+ if(iter->get_turnout_id())
{
- TurnoutMap::const_iterator i = trnts.find(track->get_turnout_id());
+ TurnoutMap::const_iterator i = trnts.find(iter->get_turnout_id());
if(i==trnts.end())
break;
path = i->second;
}
- add_track(*track);
+ add_track(*iter);
- unsigned out_ep = track->traverse(ep, path);
- Track *next = track->get_links()[out_ep];
- if(!next)
- break;
-
- ep = next->get_endpoint_by_link(*track);
- track = next;
+ iter = iter.next(path);
}
}
obj.add_track_chain(**i, k, turnouts);
break;
}
+
+ break;
}
}