]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/zone.cpp
Create a base class to handle common operations in Block, Route and Zone
[r2c2.git] / source / libr2c2 / zone.cpp
index 72712a2f1d74a6d911faa967c01d948d4d133cbe..00edb5799f6d4d9b49f481f7d7ef3f76113666ce 100644 (file)
@@ -10,7 +10,7 @@ using namespace Msp;
 namespace R2C2 {
 
 Zone::Zone(Layout &l):
-       layout(l),
+       TrackChain(l),
        number(0)
 {
        layout.add_zone(*this);
@@ -43,46 +43,6 @@ string Zone::get_name() const
        return result;
 }
 
-void Zone::add_track(Track &track)
-{
-       if(!is_valid(track))
-               throw logic_error("unconnected");
-
-       tracks.insert(&track);
-}
-
-bool Zone::add_tracks(const TrackSet &trks)
-{
-       TrackSet pending = trks;
-       bool first = true;
-       while(1)
-       {
-               bool ok = false;
-               for(TrackSet::const_iterator i=pending.begin(); i!=pending.end(); ++i)
-                       if(is_valid(**i))
-                       {
-                               tracks.insert(*i);
-                               pending.erase(i);
-                               ok = true;
-                               break;
-                       }
-
-               if(!ok)
-               {
-                       if(first)
-                               throw logic_error("unconnected");
-                       return pending.empty();
-               }
-
-               first = false;
-       }
-}
-
-bool Zone::has_track(Track &t) const
-{
-       return tracks.count(&t);
-}
-
 void Zone::save(list<DataFile::Statement> &st) const
 {
        st.push_back((DataFile::Statement("group"), group));
@@ -99,19 +59,6 @@ void Zone::save(list<DataFile::Statement> &st) const
                st.push_back((DataFile::Statement("block"), *i));
 }
 
-bool Zone::is_valid(Track &t) const
-{
-       if(tracks.empty())
-               return true;
-
-       const vector<Track *> &links = t.get_links();
-       for(vector<Track *>::const_iterator i=links.begin(); i!=links.end(); ++i)
-               if(*i && tracks.count(*i))
-                       return true;
-
-       return false;
-}
-
 
 Zone::Loader::Loader(Zone &z):
        DataFile::ObjectLoader<Zone>(z)