#ifndef __SORT5NODE__ #define __SORT5NODE__ /* * Class: Sort5Node * * This class defines a data structure to be used when sorting * sets of five elements. * */ template // E must be a type like char or int for which all 6 comparison // operators (<=, <, ==, etc) are valid. class Sort5Node { E val; static int count; public: // constructors and assignment operator Sort5Node(E n=0) : val(n) {} Sort5Node(const Sort5Node& b) : val(b.val) {} Sort5Node& operator=(const Sort5Node& b) {val = b.val; return *this;} // comparators for sorting in row order bool operator<=(Sort5Node& b) { ++count; return ( val <= b.val ); } bool operator< (Sort5Node& b) { ++count; return ( val < b.val ); } bool operator>=(Sort5Node& b) { ++count; return ( val >= b.val ); } bool operator> (Sort5Node& b) { ++count; return ( val > b.val ); } bool operator==(Sort5Node& b) { ++count; return ( val == b.val ); } bool operator!=(Sort5Node& b) { ++count; return ( val != b.val ); } // special "equality" of a node and it's value. bool operator==(E& b) { ++count; return ( val == b ); } // output the value friend ostream& operator<< <> (ostream& out, const Sort5Node& x); // set val void setVal(int n) { val = n; } // get val int getVal() { return val; } // initilize count static void initCount() { count = 0; } // reset count static void resetCount() { count = 0; } // get count static int getCount() { return count; } };// end class Sort5Node template int Sort5Node::count = 0; template ostream& operator<<(ostream& out, const Sort5Node& x) { out << x.val; return out; } #endif