]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/trainpanel.cpp
Add TrackIter and BlockIter classes
[r2c2.git] / source / engineer / trainpanel.cpp
index a0dbbeef3890e345b773344f78c4c8d87ce6d8bd..96aa00df6de1816a3cbea78cb50d22570e965d28 100644 (file)
@@ -8,6 +8,7 @@ Distributed under the GPL
 #include <cmath>
 #include <msp/strings/formatter.h>
 #include "libmarklin/timetable.h"
+#include "libmarklin/trackiter.h"
 #include "libmarklin/vehicletype.h"
 #include "engineer.h"
 #include "routeselect.h"
@@ -263,13 +264,14 @@ void TrainPanel::place(Track *track, unsigned ep)
        pick_conn.disconnect();
 
        Block &block = track->get_block();
+       TrackIter iter(track, ep);
 
-       while(1)
+       while(block.has_track(*iter))
        {
                const vector<Block::Endpoint> &eps = block.get_endpoints();
                bool ok = false;
                for(unsigned i=0; (!ok && i<eps.size()); ++i)
-                       if(eps[i].track==track && eps[i].track_ep==ep)
+                       if(eps[i].track==iter.track() && eps[i].track_ep==iter.entry())
                        {
                                train.place(block, i);
                                ok = true;
@@ -277,14 +279,8 @@ void TrainPanel::place(Track *track, unsigned ep)
 
                if(ok)
                        break;
-               else
-               {
-                       Track *next = track->get_links()[ep];
-                       ep = next->traverse(next->get_endpoint_by_link(*track), 0);
-                       track = next;
-                       if(!block.has_track(*track))
-                               break;
-               }
+
+               iter = iter.flip().reverse();
        }
 }