stdlib: Introduce ord and eq interfaces. Make std::sort::quick_sort3 use them. i=#2348
This commit is contained in:
10
src/libcore/cmp.rs
Normal file
10
src/libcore/cmp.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[doc="Interfaces used for comparison."]
|
||||
|
||||
iface ord {
|
||||
fn lt(&&other: self) -> bool;
|
||||
}
|
||||
|
||||
iface eq {
|
||||
fn eq(&&other: self) -> bool;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user