summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-16 05:52:27 +0000
committerPaul Phillips <paulp@improving.org>2011-07-16 05:52:27 +0000
commit1fc6f7eb4effbdaf209f0eb44547d092feaa17dc (patch)
tree85c2be205c68a077847bc232a47f4f576d7de872 /src
parente56c8c561f6adc1f88ce7d03e16c494dddeab5d3 (diff)
downloadscala-1fc6f7eb4effbdaf209f0eb44547d092feaa17dc.tar.gz
scala-1fc6f7eb4effbdaf209f0eb44547d092feaa17dc.tar.bz2
scala-1fc6f7eb4effbdaf209f0eb44547d092feaa17dc.zip
Fleshed out scala.math.Ordered documentation.
Contributed by josh marcus.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/math/Ordered.scala81
1 files changed, 64 insertions, 17 deletions
diff --git a/src/library/scala/math/Ordered.scala b/src/library/scala/math/Ordered.scala
index 9645b9b840..04d4c589a4 100644
--- a/src/library/scala/math/Ordered.scala
+++ b/src/library/scala/math/Ordered.scala
@@ -8,42 +8,89 @@
package scala.math
-/** A trait for totally ordered data.
+/** A trait for data that have a single, natural ordering. See
+ * [[scala.math.Ordering]] before using this trait for
+ * more information about whether to use use [[scala.math.Ordering]] instead.
*
- * Note that since version 2006-07-24 this trait is no longer covariant
- * in `A`.
+ * Classes that implement this trait can be sorted with
+ * [[scala.utils.Sorting]] and can be compared with standard comparison operators
+ * (e.g. > and <).
+ *
+ * Ordered should be used for data with a single, natural ordering (like
+ * integers) while Ordering allows for multiple ordering implementations.
+ * An Ordering instance will be implicitly created if necessary.
+ *
+ * [[scala.math.Ordering]] is an alternative to this trait that allows multiple orderings to be defined for the same type.
+ *
+ * [[scala.math.PartiallyOrdered]] is an alternative to this trait for partially ordered data.
+ *
+ * For example, to create a simple class that implements Ordered and then sort it with [[scala.utils.Sorting]]:
+ * {{{
+ * class OrderedClass(n:Int) extends Ordered[OrderedClass] {
+ * def compare(that: OrderedClass) = this.n - that.n
+ * }
+ *
+ * val x = List(new MyClass(1), new MyClass(5), new MyClass(3))
+ * val result = scala.utils.Sorting.quickSort(x)
+ * }}}
+ *
+ * Some additional notes from the initial implementation:
+ *
+ * Note that since version 2006-07-24 this trait is no longer covariant in `A`.
*
* It is important that the `equals` method for an instance of `Ordered[A]`
- * be consistent with the compare method. However, due to limitations
- * inherent in the type erasure semantics, there is no reasonable way to
- * provide a default implementation of equality for instances of `Ordered[A]`.
- * Therefore, if you need to be able to use equality on an instance of
- * `Ordered[A]` you must provide it yourself either when inheriting or
- * instantiating.
+ * be consistent with the compare method. However, due to limitations
+ * inherent in the type erasure semantics, there is no reasonable way to
+ * provide a default implementation of equality for instances of `Ordered[A]`.
+ * Therefore, if you need to be able to use equality on an instance of
+ * `Ordered[A]` you must provide it yourself either when inheriting or
+ * instantiating.
*
* It is important that the `hashCode` method for an instance of `Ordered[A]`
- * be consistent with the `compare` method. However, it is not possible to
- * provide a sensible default implementation. Therefore, if you need to be
- * able compute the hash of an instance of `Ordered[A]` you must provide it
- * yourself either when inheriting or instantiating.
+ * be consistent with the `compare` method. However, it is not possible to
+ * provide a sensible default implementation. Therefore, if you need to be
+ * able compute the hash of an instance of `Ordered[A]` you must provide it
+ * yourself either when inheriting or instantiating.
*
+ * @see [[scala.math.Ordering]], [[scala.math.PartiallyOrdered]]
* @author Martin Odersky
* @version 1.1, 2006-07-24
*/
trait Ordered[A] extends java.lang.Comparable[A] {
/** Result of comparing `this` with operand `that`.
- * returns `x` where
- * `x &lt; 0` iff `this &lt; that`
- * `x == 0` iff `this == that`
- * `x &gt; 0` iff `this &gt; that`
+ *
+ * Implement this method to determine how instances of A will be sorted.
+ *
+ * Returns `x` where:
+ *
+ * - `x < 0` when `this > that`
+ *
+ * - `x == 0` when `this == that`
+ *
+ * - `x < 0` when `this > that`
+ *
*/
def compare(that: A): Int
+ /** Returns true if `this` is less than `that`
+ */
def < (that: A): Boolean = (this compare that) < 0
+
+ /** Returns true if `this` is greater than `that`.
+ */
def > (that: A): Boolean = (this compare that) > 0
+
+ /** Returns true if `this` is less than or equal to `that`.
+ */
def <= (that: A): Boolean = (this compare that) <= 0
+
+ /** Returns true if `this` is greater than or equal to `that`.
+ */
def >= (that: A): Boolean = (this compare that) >= 0
+
+ /** Result of comparing `this` with operand `that`.
+ */
def compareTo(that: A): Int = compare(that)
}