X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fblockiter.cpp;h=245f9634a5d0b18fab9c9c24985fe3cd34aac67c;hb=975ea87cc7be179618b06291cb2506a2523cad1f;hp=7618e4b15943dd39ba044bdc90f948a13d2fceaa;hpb=2bb6ce8ada216c0b2caa48f4639d03f2c581098e;p=r2c2.git diff --git a/source/libmarklin/blockiter.cpp b/source/libmarklin/blockiter.cpp index 7618e4b..245f963 100644 --- a/source/libmarklin/blockiter.cpp +++ b/source/libmarklin/blockiter.cpp @@ -34,10 +34,18 @@ TrackIter BlockIter::track_iter() const if(!_block) return TrackIter(); - const Block::Endpoint &ep = _block->get_endpoints()[_entry]; + const Block::Endpoint &ep = _block->get_endpoint(_entry); return TrackIter(ep.track, ep.track_ep); } +const Block::Endpoint &BlockIter::endpoint() const +{ + if(!_block) + throw InvalidState("BlockIter is null"); + + return _block->get_endpoint(_entry); +} + int BlockIter::get_exit(const Route *route) const { const vector &eps = _block->get_endpoints(); @@ -48,19 +56,14 @@ int BlockIter::get_exit(const Route *route) const if(!_block->has_track(*t_iter)) throw LogicError("Block traversal strayed out of the block"); - int path = -1; - if(t_iter->get_turnout_id() && route) - path = route->get_turnout(t_iter->get_turnout_id()); - if(path==-1) - path = t_iter->get_active_path(); - + unsigned path = (route ? route->get_path(*t_iter) : t_iter->get_active_path()); TrackIter t_exit = t_iter.reverse(path); for(unsigned i=0; i