+private:
+ virtual void on_track_added(Track &);
+
+public:
+ void set_direction_towards(Track &, Direction);
+ bool has_direction() const { return up_end>=0; }
+ void set_preferred_direction(Direction);
+ Direction get_preferred_direction() const { return preferred_dir; }
+ void clear_direction();
+ virtual TrackIter iter_for(Track &, Direction) const;
+private:
+ TrackIter next_iter(const TrackIter &) const;
+public:
+ using TrackChain::get_end;
+ virtual TrackIter get_end(Direction) const;
+