From a6c92f0a179c4f048aaa5145c438611175b41a0d Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 6 Jun 2012 14:19:52 -0700 Subject: Revert "Revert "Merge pull request #2516 from mozilla/incoming" due to failures" This reverts commit 9fae95860de510f6874810cf43efb83f101246ef. --- src/libcore/cmp.rs | 10 ++++++++++ src/libcore/core.rc | 2 ++ src/libcore/int-template.rs | 14 ++++++++++++++ src/libcore/uint-template.rs | 14 ++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 src/libcore/cmp.rs (limited to 'src/libcore') diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs new file mode 100644 index 00000000000..aea97cf1649 --- /dev/null +++ b/src/libcore/cmp.rs @@ -0,0 +1,10 @@ +#[doc="Interfaces used for comparison."] + +iface ord { + fn lt(&&other: self) -> bool; +} + +iface eq { + fn eq(&&other: self) -> bool; +} + diff --git a/src/libcore/core.rc b/src/libcore/core.rc index 84cebcceccd..668eb3c82b9 100644 --- a/src/libcore/core.rc +++ b/src/libcore/core.rc @@ -45,6 +45,7 @@ export tuple; export to_str; export swappable; export dvec, dvec_iter; +export cmp; // NDM seems to be necessary for resolve to work export option_iter; @@ -153,6 +154,7 @@ mod tuple; // Ubiquitous-utility-type modules +mod cmp; mod either; mod iter; mod logging; diff --git a/src/libcore/int-template.rs b/src/libcore/int-template.rs index 156724cb061..4011ac1a18a 100644 --- a/src/libcore/int-template.rs +++ b/src/libcore/int-template.rs @@ -1,4 +1,5 @@ import T = inst::T; +import cmp::{eq, ord}; export min_value, max_value; export min, max; @@ -10,6 +11,7 @@ export range; export compl; export abs; export parse_buf, from_str, to_str, to_str_bytes, str; +export ord, eq; const min_value: T = -1 as T << (inst::bits - 1 as T); const max_value: T = min_value - 1 as T; @@ -108,6 +110,18 @@ fn to_str_bytes(n: T, radix: uint, f: fn([u8]/&) -> U) -> U { #[doc = "Convert to a string"] fn str(i: T) -> str { ret to_str(i, 10u); } +impl ord of ord for T { + fn lt(&&other: T) -> bool { + ret self < other; + } +} + +impl eq of eq for T { + fn eq(&&other: T) -> bool { + ret self == other; + } +} + // FIXME: Has alignment issues on windows and 32-bit linux #[test] diff --git a/src/libcore/uint-template.rs b/src/libcore/uint-template.rs index a63d01e6e8e..7126fb3d007 100644 --- a/src/libcore/uint-template.rs +++ b/src/libcore/uint-template.rs @@ -1,4 +1,5 @@ import T = inst::T; +import cmp::{eq, ord}; export min_value, max_value; export min, max; @@ -10,6 +11,7 @@ export range; export compl; export to_str, to_str_bytes; export from_str, from_str_radix, str, parse_buf; +export ord, eq; const min_value: T = 0 as T; const max_value: T = 0 as T - 1 as T; @@ -49,6 +51,18 @@ pure fn compl(i: T) -> T { max_value ^ i } +impl ord of ord for T { + fn lt(&&other: T) -> bool { + ret self < other; + } +} + +impl eq of eq for T { + fn eq(&&other: T) -> bool { + ret self == other; + } +} + #[doc = " Parse a buffer of bytes -- cgit 1.4.1-3-g733a5