]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.cpp
Improve the interface and algorithms of BlockAllocator
[r2c2.git] / source / libr2c2 / trainrouter.cpp
index 8cfedee8f28623013cfa719f436704ec2963af5f..d29438fef588b1107a70bddc620b7aa4a9bfb56e 100644 (file)
@@ -176,7 +176,7 @@ void TrainRouter::block_reserved(Block &block, Train *t)
                return;
        }
 
-       BlockIter b_iter(&block, t->get_block_allocator().get_entry_to_block(block));
+       BlockIter b_iter = t->get_block_allocator().iter_for(block);
 
        RouteList::iterator route = routes.begin();
        if(advance_route(route, block))
@@ -206,13 +206,13 @@ void TrainRouter::block_reserved(Block &block, Train *t)
 
 void TrainRouter::train_advanced(Block &block)
 {
+       BlockIter b_iter = train.get_block_allocator().iter_for(block);
+
        // Check if we've reached the next route
        if(routes.size()>1)
        {
-               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))
+               if(route.has_track(*b_iter.endpoint().track))
                {
                        routes.pop_front();
                        // XXX Exceptions?
@@ -222,9 +222,8 @@ void TrainRouter::train_advanced(Block &block)
 
        if(!routes.empty())
        {
-               BlockIter iter(&block, train.get_block_allocator().get_entry_to_block(block));
-               iter = iter.next();
-               if(iter && !is_on_route(*iter))
+               b_iter = b_iter.next();
+               if(b_iter && !is_on_route(*b_iter))
                        arriving = true;
        }
 }