Listing 3: A partial implementation of MutableSegmentSet

 #include <set>
 #include "segment.h"
 
 class MutableSegmentSet;
 
 class fCompare
 {
 public:
 fCompare(const MutableSegmentSet& set) : m_set(set) {}
 
 bool operator() (const Segment& lhs, const Segment& rhs) const;
 private:
 const MutableSegmentSet& m_set;
 };
 
 class MutableSegmentSet
 {
 public:
 typedef std::set<Segment, fCompare> SegSet;
 typedef SegSet::iterator iterator;
 typedef SegSet::const_iterator const_iterator;
 
 MutableSegmentSet() : m_set(fCompare(*this)), m_scan_pos(0) {}
 
 void set_coord(int x)
 {
 m_scan_pos = x;
 reorder();
 }
 int get_coord() const { return m_scan_pos; }
 
 // methods begin, end 
 // methods insert, erase, find
 
 private:
 std::set<Segment, fCompare> m_set;
 int m_scan_pos;
 
 class MutableIter : public SegSet::iterator
 {
 public:
 typedef SegSet::iterator BaseIter;
 
 // constructors
 
 Segment& operator*()
 {
 return const_cast<Segment&>(this->BaseIter::operator*());
 }
 MutableIter& operator++();
 const MutableIter operator++(int);
 MutableIter& operator--();
 const MutableIter operator--(int);
 bool operator==( const MutableIter& rhs);
 bool operator!=( const MutableIter& rhs);
 Segment* operator->();
 };
 
 void reorder();
 void reverse(iterator first, iterator last);
 iterator get_intersecting_segs(iterator first, iterator last);
 };