# ADT:Comparator

Note: The class Comparator is modeled after from Java class ``java.util.Comparator`', from which the documentation is also derived.

### Import List

        Object
        Object
        RT0

Class List
Comparator |
String |

Class Summary: Comparator [Detail]

      +---RT0.Object
           |
           +---Object.Object
                |
                +--ADT:Comparator.Comparator

Method Summary
Compare(Object, Object): LONGINT Compares its two arguments for order.
Inherited Methods
From RT0.Object: Finalize From Object.Object: Equals, HashCode, ToString

Class Summary: String [Detail]

      +---RT0.Object
           |
           +---Object.Object
                |
                +---ADT:Comparator.Comparator
                     |
                     +--ADT:Comparator.String

Method Summary
Compare(Object, Object): LONGINT Compares its two arguments for order.
Inherited Methods
From RT0.Object: Finalize From Object.Object: Equals, HashCode, ToString From ADT:Comparator.Comparator: Compare

Class Detail: Comparator

Method Detail

### Compare

    PROCEDURE (cmp: Comparator) Compare(o1: Object;
                      o2: Object): LONGINT

> Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

> The implementor must ensure that ``sgn(Compare(x, y)) = -sgn(Compare(y, x))`' for all ``x`' and ``y`'. (This implies that ``Compare(x, y)`' must throw an exception if and only if ``Compare(y, x)`' throws an exception.)

> The implementor must also ensure that the relation is transitive: ``((Compare(x, y)>0) & (Compare(y, z)>0))`' implies ``Compare(x, z)>0`'.

> Finally, the implementer must ensure that ``Compare(x, y)=0`' implies that ``sgn(Compare(x, z))==sgn(Compare(y, z))`' for all ``z`'.

> It is generally the case, but not strictly required that ``(Compare(x, y)==0) == (x.Equals(y))`'. Generally speaking, any comparator that violates this condition should clearly indicate this fact. The recommended language is "Note: this comparator imposes orderings that are inconsistent with ``Equals()`'."

Class Detail: String

Method Detail

### Compare

    PROCEDURE (cmp: String) Compare(o1: Object;
                      o2: Object): LONGINT

> Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

> The implementor must ensure that ``sgn(Compare(x, y)) = -sgn(Compare(y, x))`' for all ``x`' and ``y`'. (This implies that ``Compare(x, y)`' must throw an exception if and only if ``Compare(y, x)`' throws an exception.)

> The implementor must also ensure that the relation is transitive: ``((Compare(x, y)>0) & (Compare(y, z)>0))`' implies ``Compare(x, z)>0`'.

> Finally, the implementer must ensure that ``Compare(x, y)=0`' implies that ``sgn(Compare(x, z))==sgn(Compare(y, z))`' for all ``z`'.

> It is generally the case, but not strictly required that ``(Compare(x, y)==0) == (x.Equals(y))`'. Generally speaking, any comparator that violates this condition should clearly indicate this fact. The recommended language is "Note: this comparator imposes orderings that are inconsistent with ``Equals()`'."

> [Description inherited from Compare]

> Redefines: Compare