#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); };