X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fblock.cpp;h=3ca744ca0c287796396263c825130977be3e4e7f;hb=25b79ab38c2be2e5c89b8240504f641fd9c4899c;hp=3bd251f3afd03189edad88502b1a7b28f50ec4b3;hpb=52cbe8d99669f843f8f75c51128e2748584dd03a;p=r2c2.git diff --git a/source/libmarklin/block.cpp b/source/libmarklin/block.cpp index 3bd251f..3ca744c 100644 --- a/source/libmarklin/block.cpp +++ b/source/libmarklin/block.cpp @@ -14,7 +14,7 @@ namespace Marklin { Block::Block(TrafficManager &tm, Track &start): trfc_mgr(tm), id(next_id++), - sensor_id(0), + sensor_id(start.get_sensor_id()), train(0) { tracks.insert(&start); @@ -31,7 +31,7 @@ Block::Block(TrafficManager &tm, Track &start): for(unsigned i=0; iget_sensor_id()==start.get_sensor_id()) + if(links[i]->get_sensor_id()==sensor_id) { queue.push_back(links[i]); tracks.insert(links[i]); @@ -59,7 +59,7 @@ int Block::get_endpoint_by_link(const Block &other) const return -1; } -int Block::traverse(unsigned epi) const +int Block::traverse(unsigned epi, float *len) const { if(epi>=endpoints.size()) throw InvalidParameterValue("Endpoint index out of range"); @@ -68,6 +68,9 @@ int Block::traverse(unsigned epi) const Track *track=ep.track; unsigned track_ep=ep.track_ep; + if(len) + *len=0; + while(1) { unsigned cur_route=0; @@ -78,9 +81,12 @@ int Block::traverse(unsigned epi) const cur_route=turnout.get_route(); } + if(len) + *len+=track->get_type().get_route_length(cur_route); + int other_ep=track->traverse(track_ep, cur_route); if(other_ep<0) - return 0; + return -1; for(unsigned i=0; i(other_ep)) @@ -123,7 +129,10 @@ bool Block::reserve(const Train *t) if(!t || !train) { train=t; - cout<<"Block "<get_name()<<'\n'; + else + cout<<"Block "<routes|=route; } } - - visited.erase(--visited.end()); } unsigned Block::next_id=1;