X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouter.cpp;h=5691ac9a30ccdbdcc15e506d3581f2be26cddc31;hb=fb5bd959109927ea02ead1483a4bb0c5a66784a4;hp=508a7b19651a4835206a0c76f1b2d8e9c90eeaaa;hpb=c52c0e591be55cb2c7251689c69c642e3cb3601c;p=r2c2.git diff --git a/source/libr2c2/trainrouter.cpp b/source/libr2c2/trainrouter.cpp index 508a7b1..5691ac9 100644 --- a/source/libr2c2/trainrouter.cpp +++ b/source/libr2c2/trainrouter.cpp @@ -343,17 +343,21 @@ Route *TrainRouter::create_lead_route(Route *lead, const Route *target) lead->set_temporary(true); } - set tracks; - for(BlockIter i=train.get_block_allocator().first(); (i && i->get_train()==&train); i=i.next()) + bool target_reached = false; + for(TrackIter i=train.get_block_allocator().first().track_iter(); i; i=i.next()) { - const set &btracks = i->get_tracks(); - for(set::const_iterator j=btracks.begin(); j!=btracks.end(); ++j) - if(!target || !target->has_track(**j)) - tracks.insert(*j); + if(i->get_block().get_train()!=&train) + break; + if(target) + { + if(target->has_track(*i)) + target_reached = true; + else if(target_reached) + break; + } + lead->add_track(*i); } - lead->add_tracks(tracks); - return lead; }