stdlib: Introduce ord and eq interfaces. Make std::sort::quick_sort3 use them. i=#2348

This commit is contained in:
Patrick Walton
2012-06-05 17:26:52 -07:00
parent 49c6dac47a
commit d9cdddeb5f
5 changed files with 44 additions and 9 deletions

10
src/libcore/cmp.rs Normal file
View File

@@ -0,0 +1,10 @@
#[doc="Interfaces used for comparison."]
iface ord {
fn lt(&&other: self) -> bool;
}
iface eq {
fn eq(&&other: self) -> bool;
}

View File

@@ -44,6 +44,7 @@ export extfmt;
export tuple;
export to_str;
export dvec, dvec_iter;
export cmp;
// NDM seems to be necessary for resolve to work
export option_iter;
@@ -152,6 +153,7 @@ mod tuple;
// Ubiquitous-utility-type modules
mod cmp;
mod either;
mod iter;
mod logging;

View File

@@ -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<U>(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]

View File

@@ -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