]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/block.cpp
Measure and display train speeds
[r2c2.git] / source / libmarklin / block.cpp
index 0106a50731d6dc3fb98e2e5a8f68a4c359614a04..3ca744ca0c287796396263c825130977be3e4e7f 100644 (file)
@@ -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<endpoints.size(); ++i)
                        if(endpoints[i].track==track && endpoints[i].track_ep==static_cast<unsigned>(other_ep))
@@ -124,7 +130,7 @@ bool Block::reserve(const Train *t)
        {
                train=t;
                if(train)
-                       cout<<"Block "<<this<<" reserved for train "<<train<<'\n';
+                       cout<<"Block "<<this<<" reserved for train "<<train->get_name()<<'\n';
                else
                        cout<<"Block "<<this<<" freed\n";
                trfc_mgr.signal_block_reserved.emit(*this, train);