deferred class interface COMPARABLE -- -- All classes handling COMPARABLE objects with a total order relation -- should inherit from this class. -- feature(s) from COMPARABLE infix "<" (other: like Current): BOOLEAN -- Is Current strictly less than other? require other_exists: other /= Void ensure asymmetric: Result implies not (other < Current) infix "<=" (other: like Current): BOOLEAN -- Is Current less than or equal other? require other_exists: other /= Void ensure definition: Result = (Current < other or is_equal(other)) infix ">" (other: like Current): BOOLEAN -- Is Current strictly greater than other? require other_exists: other /= Void ensure definition: Result = (other < Current) infix ">=" (other: like Current): BOOLEAN -- Is Current greater than or equal than other? require other_exists: other /= Void ensure definition: Result = (other <= Current) in_range (lower, upper: like Current): BOOLEAN -- Return true if Current is in range [lower..upper] ensure Result = (Current >= lower and Current <= upper) compare (other: like Current): INTEGER -- If current object equal to other, 0; -- if smaller, -1; if greater, 1. require other_exists: other /= Void ensure equal_zero: Result = 0 = is_equal(other); smaller_negative: Result = - 1 = Current < other; greater_positive: Result = 1 = Current > other three_way_comparison (other: like Current): INTEGER -- If current object equal to other, 0; -- if smaller, -1; if greater, 1. require other_exists: other /= Void ensure equal_zero: Result = 0 = is_equal(other); smaller_negative: Result = - 1 = Current < other; greater_positive: Result = 1 = Current > other min (other: like Current): like Current -- Minimum of Current and other. require other /= Void ensure Result <= Current and then Result <= other; compare(Result) = 0 or else other.compare(Result) = 0 max (other: like Current): like Current -- Maximum of Current and other. require other /= Void ensure Result >= Current and then Result >= other; compare(Result) = 0 or else other.compare(Result) = 0 end of deferred COMPARABLE