Listing 1: Segment class and a function object that orders the segments based on a scanline position

 class Segment
 {
 public:
 // Return y-coord for point on segment given its x-coord.
 int evaluate(const int xcoord) const
 {
 return lower_y + slope() * (xcoord - lower_x);
 }
 // other functions not shown
 private:
 int lower_x, lower_y, upper_x, upper_y;
 // other members not shown
 };
 
 class fCompare
 {
 public:
 fCompare(int scan_pos) : m_scan_pos(scan_pos) {}
 
 bool operator() (const Segment& lhs, const Segment& rhs) const
 {
 if (lhs.evaluate(m_scan_pos) < rhs.evaluate(m_scan_pos)) 
 return true;
 else 
 // handle ties
 }
 private:
 int m_scan_pos;
 };