auto merge of #11130 : olsonjeffery/rust/master, r=alexcrichton

So that `Uuid` can be used as the key in a `HashMap` or in a `HashSet`, etc

The only question I have about this is: Is endianness an issue, here? If so, what's the correct way to proceed?
This commit is contained in:
bors 2013-12-24 01:56:30 -08:00
commit b8c87fd9fe

View File

@ -65,6 +65,7 @@ use std::rand;
use std::rand::Rng;
use std::cmp::Eq;
use std::cast::{transmute,transmute_copy};
use std::to_bytes::{IterBytes, Cb};
use serialize::{Encoder, Encodable, Decoder, Decodable};
@ -104,6 +105,11 @@ pub struct Uuid {
/// The 128-bit number stored in 16 bytes
bytes: UuidBytes
}
impl IterBytes for Uuid {
fn iter_bytes(&self, _: bool, f: Cb) -> bool {
f(self.bytes.slice_from(0))
}
}
/// A UUID stored as fields (identical to UUID, used only for conversions)
struct UuidFields {
@ -796,6 +802,17 @@ mod test {
let u2 = Decodable::decode(&mut ebml::reader::Decoder(doc));
assert_eq!(u, u2);
}
#[test]
fn test_iterbytes_impl_for_uuid() {
use std::hashmap::HashSet;
let mut set = HashSet::new();
let id1 = Uuid::new_v4();
let id2 = Uuid::new_v4();
set.insert(id1);
assert!(set.contains(&id1));
assert!(!set.contains(&id2));
}
}
#[cfg(test)]