X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Flibr2c2%2Fblockallocator.cpp;h=6e2a11cde0bedf77295b089f97961d8467859c98;hb=ab3073367fb8e7d7b534b5c5b81a16346ba20717;hp=2e816775f7dfa7c86683a559e3f1f638e436b33f;hpb=d051af7264ee62d03473f1929414e262e918c30a;p=r2c2.git diff --git a/source/libr2c2/blockallocator.cpp b/source/libr2c2/blockallocator.cpp index 2e81677..6e2a11c 100644 --- a/source/libr2c2/blockallocator.cpp +++ b/source/libr2c2/blockallocator.cpp @@ -28,6 +28,7 @@ struct BlockAllocator::BlockMatch BlockAllocator::BlockAllocator(Train &t): train(t), + active(false), cur_blocks_end(blocks.end()), next_sensor(0), pending_block(0), @@ -41,7 +42,7 @@ BlockAllocator::BlockAllocator(Train &t): const set &tracks = layout.get_all(); for(set::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) - if((*i)->get_turnout_id()) + if((*i)->get_turnout_address()) { (*i)->signal_path_changing.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &BlockAllocator::turnout_path_changing), sigc::ref(**i)))); (*i)->signal_path_changed.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &BlockAllocator::turnout_path_changed), sigc::ref(**i)))); @@ -79,7 +80,7 @@ bool BlockAllocator::start_from(const BlockIter &block) break; blocks_to_reserve.push_back(b); for(TrackIter t=b.track_iter(); (t && &t->get_block()==&*b); t=t.next()) - remaining_length -= t->get_type().get_path_length(t->get_active_path()); + remaining_length -= t->get_path_length(); if(remaining_length<=0) break; } @@ -206,7 +207,7 @@ void BlockAllocator::reserve_more() float dist = 0; for(BlockList::const_iterator i=cur_blocks_end; i!=blocks.end(); ++i) { - if((*i)->get_sensor_id()) + if((*i)->get_sensor_address()) ++nsens; if(nsens>0) dist += (*i)->get_path_length(i->entry()); @@ -227,7 +228,7 @@ void BlockAllocator::reserve_more() // The track ends here break; - if(block->get_turnout_id() && !prev->get_turnout_id()) + if(block->get_turnout_address() && !prev->get_turnout_address()) { /* We are arriving at a turnout. See if we have enough blocks and distance reserved. */ @@ -278,7 +279,7 @@ void BlockAllocator::reserve_more() if(&*block==stop_at_block) break; - if(block->get_sensor_id()) + if(block->get_sensor_address()) ++nsens; if(nsens>0) dist += block->get_path_length(block.entry()); @@ -338,6 +339,9 @@ void BlockAllocator::advance_front(const Block *block, bool inclusive) else end = blocks.end(); + if(end==blocks.end() && blocks.back().block()==pending_block) + --end; + SetFlag setf(advancing); BlockList::iterator i = cur_blocks_end; // Update cur_blocks_end first to keep things consistent. @@ -610,8 +614,8 @@ void BlockAllocator::Loader::block(unsigned id) obj.blocks.push_back(BlockIter(blk, entry)); blk->reserve(&obj.train); - if(blk->get_sensor_id()) - obj.train.get_layout().get_driver().set_sensor(blk->get_sensor_id(), true); + if(blk->get_sensor_address()) + obj.train.get_layout().get_driver().set_sensor(blk->get_sensor_address(), true); prev_block = blk; }