Skip to content

Commit

Permalink
auto merge of #11130 : olsonjeffery/rust/master, r=alexcrichton
Browse files Browse the repository at this point in the history
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?
  • Loading branch information
bors committed Dec 24, 2013
2 parents e09a8e8 + 41cbbb6 commit b8c87fd
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/libextra/uuid.rs
Expand Up @@ -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};

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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)]
Expand Down

0 comments on commit b8c87fd

Please sign in to comment.