void Train::set_speed(unsigned speed)
{
target_speed=speed;
- if(rsv_sections.empty() && !reserve_more())
+ if(rsv_blocks.empty() && !reserve_more())
return;
loco.set_speed(speed);
}
-void Train::place(Section *sect, const Section::Endpoint *entry)
+void Train::place(Block *block, const Block::Endpoint *entry)
{
- for(SectRefSeq::iterator i=rsv_sections.begin(); i!=rsv_sections.end();)
+ for(BlockRefSeq::iterator i=rsv_blocks.begin(); i!=rsv_blocks.end();)
{
- i->section->reserve(0);
- i=rsv_sections.erase(i);
+ i->block->reserve(0);
+ i=rsv_blocks.erase(i);
}
- for(SectRefSeq::iterator i=cur_sections.begin(); i!=cur_sections.end();)
+ for(BlockRefSeq::iterator i=cur_blocks.begin(); i!=cur_blocks.end();)
{
- i->section->reserve(0);
- i=cur_sections.erase(i);
+ i->block->reserve(0);
+ i=cur_blocks.erase(i);
}
- if(!sect->reserve(this))
+ if(!block->reserve(this))
return;
- cur_sections.push_back(SectionRef(sect, entry));
+ cur_blocks.push_back(BlockRef(block, entry));
}
-bool Train::free_section(Section *sect)
+bool Train::free_block(Block *block)
{
- for(SectRefSeq::iterator i=rsv_sections.begin(); i!=rsv_sections.end(); ++i)
- if(i->section==sect)
+ for(BlockRefSeq::iterator i=rsv_blocks.begin(); i!=rsv_blocks.end(); ++i)
+ if(i->block==block)
{
- while(i!=rsv_sections.end())
+ while(i!=rsv_blocks.end())
{
- i->section->reserve(0);
- i=rsv_sections.erase(i);
+ i->block->reserve(0);
+ i=rsv_blocks.erase(i);
}
return true;
}
{
if(state)
{
- SectRefSeq::iterator i;
- for(i=rsv_sections.begin(); i!=rsv_sections.end(); ++i)
- if(i->section->get_sensor_id() && i->section->get_sensor_id()!=addr)
+ BlockRefSeq::iterator i;
+ for(i=rsv_blocks.begin(); i!=rsv_blocks.end(); ++i)
+ if(i->block->get_sensor_id() && i->block->get_sensor_id()!=addr)
break;
- cur_sections.splice(cur_sections.begin(), rsv_sections, rsv_sections.begin(), i);
+ cur_blocks.splice(cur_blocks.begin(), rsv_blocks, rsv_blocks.begin(), i);
reserve_more();
- if(rsv_sections.empty())
+ if(rsv_blocks.empty())
loco.set_speed(0);
}
else
{
- SectRefSeq::iterator i;
- for(i=cur_sections.begin(); i!=cur_sections.end(); ++i)
- if(i->section->get_sensor_id()==addr)
+ BlockRefSeq::iterator i;
+ for(i=cur_blocks.begin(); i!=cur_blocks.end(); ++i)
+ if(i->block->get_sensor_id()==addr)
break;
- if(i!=cur_sections.end())
+ if(i!=cur_blocks.end())
{
++i;
- for(SectRefSeq::iterator j=cur_sections.begin(); j!=i; ++j)
- j->section->reserve(0);
- cur_sections.erase(cur_sections.begin(), i);
+ for(BlockRefSeq::iterator j=cur_blocks.begin(); j!=i; ++j)
+ j->block->reserve(0);
+ cur_blocks.erase(cur_blocks.begin(), i);
}
reserve_more();
bool Train::reserve_more()
{
- SectionRef *last=0;
- if(!rsv_sections.empty())
- last=&rsv_sections.back();
- else if(!cur_sections.empty())
- last=&cur_sections.back();
+ BlockRef *last=0;
+ if(!rsv_blocks.empty())
+ last=&rsv_blocks.back();
+ else if(!cur_blocks.empty())
+ last=&cur_blocks.back();
if(!last)
return false;
bool result=false;
- unsigned size=rsv_sections.size();
+ unsigned size=rsv_blocks.size();
while(size<5)
{
- const Section::Endpoint *exit=last->section->traverse(last->entry);
+ const Block::Endpoint *exit=last->block->traverse(last->entry);
if(exit->link->reserve(this))
{
- rsv_sections.push_back(SectionRef(exit->link, exit->link->get_endpoint_by_link(last->section)));
- last=&rsv_sections.back();
+ rsv_blocks.push_back(BlockRef(exit->link, exit->link->get_endpoint_by_link(last->block)));
+ last=&rsv_blocks.back();
++size;
result=true;
}