+
+ layout.add_block(*this);
+}
+
+Block::~Block()
+{
+ set<Track *> trks = tracks;
+ tracks.clear();
+ for(set<Track *>::iterator i=trks.begin(); i!=trks.end(); ++i)
+ (*i)->set_block(0);
+
+ for(vector<Endpoint>::iterator i=endpoints.begin(); i!=endpoints.end(); ++i)
+ if(Block *blk = i->link)
+ {
+ i->link = 0;
+ blk->break_link(*this);
+ }
+
+ layout.remove_block(*this);
+}
+
+bool Block::has_track(Track &t) const
+{
+ return tracks.count(&t);