From 15744210e7913c6607bf033f4ffd53d36de116e6 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 9 Jan 2012 16:24:53 +0100 Subject: Implement std::map as an iface/impl instead of an obj --- src/libstd/smallintmap.rs | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src/libstd/smallintmap.rs') diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index d40adc84739..ca618baa554 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -80,3 +80,67 @@ fn max_key(m: smallintmap) -> uint { ret vec::len::>(m.v); } +/* +Impl: map + +Implements the map::map interface for smallintmap +*/ +impl of map::map for smallintmap { + fn size() -> uint { + let sz = 0u; + for item in self.v { + alt item { some(_) { sz += 1u; } _ {} } + } + sz + } + fn insert(&&key: uint, value: V) -> bool { + let exists = contains_key(self, key); + insert(self, key, value); + ret !exists; + } + fn remove(&&key: uint) -> option::t { + if key >= vec::len(self.v) { ret none; } + let old = self.v[key]; + self.v[key] = none; + old + } + fn contains_key(&&key: uint) -> bool { + contains_key(self, key) + } + fn get(&&key: uint) -> V { get(self, key) } + fn find(&&key: uint) -> option::t { find(self, key) } + fn rehash() { fail } + fn items(it: block(&&uint, V)) { + let idx = 0u; + for item in self.v { + alt item { + some(elt) { + it(idx, elt); + } + none. { } + } + idx += 1u; + } + } + fn keys(it: block(&&uint)) { + let idx = 0u; + for item in self.v { + if item != none { it(idx); } + idx += 1u; + } + } + fn values(it: block(V)) { + for item in self.v { + alt item { some(elt) { it(elt); } _ {} } + } + } +} + +/* +Funtion: as_map + +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