From 01e2471cb7bc7f84863bdb0d67cfa2af16d54f9e Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 27 Jul 2012 14:51:19 -0700 Subject: core: Trait-ify various overloaded operators --- src/libstd/bitv.rs | 10 ++++++++-- src/libstd/map.rs | 8 ++++++++ src/libstd/smallintmap.rs | 12 ++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index adb7f56ef3b..145ceba4ae5 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -239,7 +239,7 @@ trait methods { fn union(rhs: bitv) -> bool; fn intersect(rhs: bitv) -> bool; fn assign(rhs: bitv) -> bool; - fn get(i: uint) -> bool; + pure fn get(i: uint) -> bool; fn [](i: uint) -> bool; fn eq(rhs: bitv) -> bool; fn clear(); @@ -261,7 +261,7 @@ impl of methods for bitv { fn union(rhs: bitv) -> bool { union(self, rhs) } fn intersect(rhs: bitv) -> bool { intersect(self, rhs) } fn assign(rhs: bitv) -> bool { assign(self, rhs) } - fn get(i: uint) -> bool { get(self, i) } + pure fn get(i: uint) -> bool { get(self, i) } fn [](i: uint) -> bool { self.get(i) } fn eq(rhs: bitv) -> bool { equal(self, rhs) } fn clear() { clear(self) } @@ -285,6 +285,12 @@ impl of methods for bitv { } } +impl extensions of ops::index for bitv { + pure fn index(&&i: uint) -> bool { + self.get(i) + } +} + impl of to_str::to_str for bitv { fn to_str() -> ~str { to_str(self) } } diff --git a/src/libstd/map.rs b/src/libstd/map.rs index afb5f28ae08..2522c9d5876 100644 --- a/src/libstd/map.rs +++ b/src/libstd/map.rs @@ -314,6 +314,14 @@ mod chained { } } + impl hashmap of ops::index for t { + pure fn index(k: K) -> V { + unchecked { + self.get(k) + } + } + } + fn chains(nchains: uint) -> ~[mut chain] { ret vec::to_mut(vec::from_elem(nchains, absent)); diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index 02948f58fc4..0325ef3ac2e 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -35,7 +35,7 @@ fn insert(self: smallintmap, key: uint, val: T) { * Get the value for the specified key. If the key does not exist * in the map then returns none */ -fn find(self: smallintmap, key: uint) -> option { +pure fn find(self: smallintmap, key: uint) -> option { if key < self.v.len() { ret self.v.get_elt(key); } ret none::; } @@ -47,7 +47,7 @@ fn find(self: smallintmap, key: uint) -> option { * * If the key does not exist in the map */ -fn get(self: smallintmap, key: uint) -> T { +pure fn get(self: smallintmap, key: uint) -> T { alt find(self, key) { none { #error("smallintmap::get(): key not present"); fail; } some(v) { ret v; } @@ -114,6 +114,14 @@ impl of map::map for smallintmap { } } +impl extensions of ops::index for smallintmap { + pure fn index(&&key: uint) -> V { + unchecked { + get(self, key) + } + } +} + /// Cast the given smallintmap to a map::map fn as_map(s: smallintmap) -> map::map { s as map::map:: -- cgit 1.4.1-3-g733a5