]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.cpp
Split block allocation to a separate class
[r2c2.git] / source / libr2c2 / trainrouter.cpp
index 77d6f71c8a082f9108921b3d3051b58b4fada51f..8cfedee8f28623013cfa719f436704ec2963af5f 100644 (file)
@@ -35,8 +35,9 @@ bool TrainRouter::set_route(const Route *r)
        Route *lead = 0;
        if(r && train.is_placed())
        {
-               TrackIter first = train.get_tail_block().track_iter();
-               TrackIter next = train.get_head_block().next().track_iter();
+               const BlockAllocator &allocator = train.get_block_allocator();
+               TrackIter first = allocator.first().track_iter();
+               TrackIter next = allocator.last().next().track_iter();
                if(!r->has_track(*next))
                {
                        lead = Route::find(next, *r);
@@ -175,7 +176,7 @@ void TrainRouter::block_reserved(Block &block, Train *t)
                return;
        }
 
-       BlockIter b_iter(&block, t->get_entry_to_block(block));
+       BlockIter b_iter(&block, t->get_block_allocator().get_entry_to_block(block));
 
        RouteList::iterator route = routes.begin();
        if(advance_route(route, block))
@@ -208,7 +209,7 @@ void TrainRouter::train_advanced(Block &block)
        // Check if we've reached the next route
        if(routes.size()>1)
        {
-               unsigned entry = train.get_entry_to_block(block);
+               unsigned entry = train.get_block_allocator().get_entry_to_block(block);
                Track &track = *block.get_endpoint(entry).track;
                const Route &route = **++routes.begin();
                if(route.has_track(track))
@@ -221,7 +222,7 @@ void TrainRouter::train_advanced(Block &block)
 
        if(!routes.empty())
        {
-               BlockIter iter(&block, train.get_entry_to_block(block));
+               BlockIter iter(&block, train.get_block_allocator().get_entry_to_block(block));
                iter = iter.next();
                if(iter && !is_on_route(*iter))
                        arriving = true;
@@ -249,7 +250,7 @@ Route *TrainRouter::create_lead_route(Route *lead, const Route *target)
        }
 
        set<Track *> tracks;
-       for(BlockIter i=train.get_tail_block(); (i && i->get_train()==&train); i=i.next())
+       for(BlockIter i=train.get_block_allocator().first(); (i && i->get_train()==&train); i=i.next())
        {
                const set<Track *> &btracks = i->get_tracks();
                for(set<Track *>::const_iterator j=btracks.begin(); j!=btracks.end(); ++j)