]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/block.cpp
Simplify some interfaces by using track and block iterators
[r2c2.git] / source / libr2c2 / block.cpp
index ec313d9d415240dab9114a27be838f27111112e4..386f2378a3b20011733cb54a17880cdd64a2d50b 100644 (file)
@@ -52,7 +52,7 @@ Block::Block(Layout &l, Track &start):
        {
                unsigned path = 1<<i;
                endpoints[i].paths |= path;
-               find_paths(TrackIter(endpoints[i].track, endpoints[i].track_ep), path);
+               find_paths(endpoints[i].track_iter(), path);
        }
 
        if(sensor_id && layout.has_driver())
@@ -86,7 +86,7 @@ bool Block::has_track(Track &t) const
 const Block::Endpoint &Block::get_endpoint(unsigned i) const
 {
        if(i>=endpoints.size())
-               throw InvalidParameterValue("Endpoint index out of range");
+               throw out_of_range("Block::get_endpoint");
 
        return endpoints[i];
 }
@@ -103,9 +103,9 @@ int Block::get_endpoint_by_link(Block &other) const
 float Block::get_path_length(unsigned entry, const Route *route) const
 {
        if(entry>=endpoints.size())
-               throw InvalidParameterValue("Endpoint index out of range");
+               throw out_of_range("Block::get_path_length");
 
-       TrackIter t_iter(endpoints[entry].track, endpoints[entry].track_ep);
+       TrackIter t_iter = endpoints[entry].track_iter();
 
        float result = 0;
        while(t_iter && has_track(*t_iter))
@@ -152,7 +152,7 @@ void Block::break_link(Block &other)
 Block *Block::get_link(unsigned epi) const
 {
        if(epi>=endpoints.size())
-               throw InvalidParameterValue("Endpoint index out of range");
+               throw out_of_range("Block::get_link");
        return endpoints[epi].link;
 }
 
@@ -185,7 +185,7 @@ void Block::tick(const Time::TimeDelta &dt)
        }
 }
 
-void Block::find_paths(TrackIter track, unsigned path)
+void Block::find_paths(const TrackIter &track, unsigned path)
 {
        unsigned mask = track.endpoint().paths;
        for(unsigned i=0; mask>>i; ++i)
@@ -254,4 +254,9 @@ Block::Endpoint::Endpoint(Track *t, unsigned e):
        paths(0)
 { }
 
+TrackIter Block::Endpoint::track_iter() const
+{
+       return TrackIter(track, track_ep);
+}
+
 } // namespace R2C2