X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fblock.cpp;h=ec07947d7e1cbffa500f05b29661ba7178b99fa8;hb=e9653dffd0026fb3c02c91a4c0feca688a86c721;hp=db1942bb5b613fde7ff1b71272383455740bc875;hpb=98047057e4adae31aa449161ca845db1a6c2db77;p=r2c2.git diff --git a/source/libmarklin/block.cpp b/source/libmarklin/block.cpp index db1942b..ec07947 100644 --- a/source/libmarklin/block.cpp +++ b/source/libmarklin/block.cpp @@ -24,6 +24,7 @@ Block::Block(Layout &l, Track &start): train(0) { tracks.insert(&start); + start.set_block(this); list queue; queue.push_back(&start); @@ -41,6 +42,7 @@ Block::Block(Layout &l, Track &start): { queue.push_back(links[i]); tracks.insert(links[i]); + links[i]->set_block(this); } else endpoints.push_back(Endpoint(track, i)); @@ -62,6 +64,11 @@ Block::Block(Layout &l, Track &start): Block::~Block() { + set trks = tracks; + tracks.clear(); + for(set::iterator i=trks.begin(); i!=trks.end(); ++i) + (*i)->set_block(0); + for(vector::iterator i=endpoints.begin(); i!=endpoints.end(); ++i) if(Block *blk = i->link) { @@ -72,7 +79,12 @@ Block::~Block() layout.remove_block(*this); } -int Block::get_endpoint_by_link(const Block &other) const +bool Block::has_track(Track &t) const +{ + return tracks.count(&t); +} + +int Block::get_endpoint_by_link(Block &other) const { for(unsigned i=0; i