Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix for unboxed closure changes
Closes #33
  • Loading branch information
sfackler committed Dec 15, 2014
1 parent 9103fc5 commit d96a1e5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 29 deletions.
25 changes: 12 additions & 13 deletions phf/src/map.rs
@@ -1,7 +1,6 @@
//! An immutable map constructed at compile time.
use core::prelude::*;
use core::borrow::BorrowFrom;
use core::iter;
use core::slice;
use core::fmt;
use PhfHash;
Expand Down Expand Up @@ -107,32 +106,32 @@ impl<K, V> Map<K, V> {
///
/// Entries are retuned in an arbitrary but fixed order.
pub fn entries<'a>(&'a self) -> Entries<'a, K, V> {
Entries { iter: self.entries.iter().map(|&(ref k, ref v)| (k, v)) }
Entries { iter: self.entries.iter() }
}

/// Returns an iterator over the keys in the map.
///
/// Keys are returned in an arbitrary but fixed order.
pub fn keys<'a>(&'a self) -> Keys<'a, K, V> {
Keys { iter: self.entries().map(|e| e.0) }
Keys { iter: self.entries() }
}

/// Returns an iterator over the values in the map.
///
/// Values are returned in an arbitrary but fixed order.
pub fn values<'a>(&'a self) -> Values<'a, K, V> {
Values { iter: self.entries().map(|e | e.1) }
Values { iter: self.entries() }
}
}

/// An iterator over the key/value pairs in a `Map`.
pub struct Entries<'a, K:'a, V:'a> {
iter: iter::Map<'a, &'a (K, V), (&'a K, &'a V), slice::Items<'a, (K, V)>>,
iter: slice::Items<'a, (K, V)>,
}

impl<'a, K, V> Iterator<(&'a K, &'a V)> for Entries<'a, K, V> {
fn next(&mut self) -> Option<(&'a K, &'a V)> {
self.iter.next()
self.iter.next().map(|&(ref k, ref v)| (k, v))
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -142,20 +141,20 @@ impl<'a, K, V> Iterator<(&'a K, &'a V)> for Entries<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<(&'a K, &'a V)> for Entries<'a, K, V> {
fn next_back(&mut self) -> Option<(&'a K, &'a V)> {
self.iter.next_back()
self.iter.next_back().map(|e| (&e.0, &e.1))
}
}

impl<'a, K, V> ExactSizeIterator<(&'a K, &'a V)> for Entries<'a, K, V> {}

/// An iterator over the keys in a `Map`.
pub struct Keys<'a, K:'a, V:'a> {
iter: iter::Map<'a, (&'a K, &'a V), &'a K, Entries<'a, K, V>>,
iter: Entries<'a, K, V>,
}

impl<'a, K, V> Iterator<&'a K> for Keys<'a, K, V> {
fn next(&mut self) -> Option<&'a K> {
self.iter.next()
self.iter.next().map(|e| e.0)
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -165,20 +164,20 @@ impl<'a, K, V> Iterator<&'a K> for Keys<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<&'a K> for Keys<'a, K, V> {
fn next_back(&mut self) -> Option<&'a K> {
self.iter.next_back()
self.iter.next_back().map(|e| e.0)
}
}

impl<'a, K, V> ExactSizeIterator<&'a K> for Keys<'a, K, V> {}

/// An iterator over the values in a `Map`.
pub struct Values<'a, K:'a, V:'a> {
iter: iter::Map<'a, (&'a K, &'a V), &'a V, Entries<'a, K, V>>,
iter: Entries<'a, K, V>,
}

impl<'a, K, V> Iterator<&'a V> for Values<'a, K, V> {
fn next(&mut self) -> Option<&'a V> {
self.iter.next()
self.iter.next().map(|e| e.1)
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -188,7 +187,7 @@ impl<'a, K, V> Iterator<&'a V> for Values<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<&'a V> for Values<'a, K, V> {
fn next_back(&mut self) -> Option<&'a V> {
self.iter.next_back()
self.iter.next_back().map(|e| e.1)
}
}

Expand Down
31 changes: 15 additions & 16 deletions phf/src/ordered_map.rs
Expand Up @@ -3,7 +3,6 @@ use core::prelude::*;
use core::borrow::BorrowFrom;
use core::fmt;
use core::slice;
use core::iter;

use PhfHash;
use phf_shared;
Expand Down Expand Up @@ -126,32 +125,32 @@ impl<K, V> OrderedMap<K, V> {
///
/// Entries are returned in the same order in which they were defined.
pub fn entries<'a>(&'a self) -> Entries<'a, K, V> {
Entries { iter: self.entries.iter().map(|&(ref k, ref v)| (k, v)) }
Entries { iter: self.entries.iter() }
}

/// Returns an iterator over the keys in the map.
///
/// Keys are returned in the same order in which they were defined.
pub fn keys<'a>(&'a self) -> Keys<'a, K, V> {
Keys { iter: self.entries().map(|e| e.0) }
Keys { iter: self.entries() }
}

/// Returns an iterator over the values in the map.
///
/// Values are returned in the same order in which they were defined.
pub fn values<'a>(&'a self) -> Values<'a, K, V> {
Values { iter: self.entries().map(|e| e.1) }
Values { iter: self.entries() }
}
}

/// An iterator over the entries in a `OrderedMap`.
pub struct Entries<'a, K:'a, V:'a> {
iter: iter::Map<'a, &'a (K, V), (&'a K, &'a V), slice::Items<'a, (K, V)>>,
iter: slice::Items<'a, (K, V)>,
}

impl<'a, K, V> Iterator<(&'a K, &'a V)> for Entries<'a, K, V> {
fn next(&mut self) -> Option<(&'a K, &'a V)> {
self.iter.next()
self.iter.next().map(|e| (&e.0, &e.1))
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -161,7 +160,7 @@ impl<'a, K, V> Iterator<(&'a K, &'a V)> for Entries<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<(&'a K, &'a V)> for Entries<'a, K, V> {
fn next_back(&mut self) -> Option<(&'a K, &'a V)> {
self.iter.next_back()
self.iter.next_back().map(|e| (&e.0, &e.1))
}
}

Expand All @@ -171,20 +170,20 @@ impl<'a, K, V> RandomAccessIterator<(&'a K, &'a V)> for Entries<'a, K, V> {
}

fn idx(&mut self, index: uint) -> Option<(&'a K, &'a V)> {
self.iter.idx(index)
self.iter.idx(index).map(|e| (&e.0, &e.1))
}
}

impl<'a, K, V> ExactSizeIterator<(&'a K, &'a V)> for Entries<'a, K, V> {}

/// An iterator over the keys in a `OrderedMap`.
pub struct Keys<'a, K:'a, V:'a> {
iter: iter::Map<'a, (&'a K, &'a V), &'a K, Entries<'a, K, V>>,
iter: Entries<'a, K, V>,
}

impl<'a, K, V> Iterator<&'a K> for Keys<'a, K, V> {
fn next(&mut self) -> Option<&'a K> {
self.iter.next()
self.iter.next().map(|e| e.0)
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -194,7 +193,7 @@ impl<'a, K, V> Iterator<&'a K> for Keys<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<&'a K> for Keys<'a, K, V> {
fn next_back(&mut self) -> Option<&'a K> {
self.iter.next_back()
self.iter.next_back().map(|e| e.0)
}
}

Expand All @@ -204,20 +203,20 @@ impl<'a, K, V> RandomAccessIterator<&'a K> for Keys<'a, K, V> {
}

fn idx(&mut self, index: uint) -> Option<&'a K> {
self.iter.idx(index)
self.iter.idx(index).map(|e| e.0)
}
}

impl<'a, K, V> ExactSizeIterator<&'a K> for Keys<'a, K, V> {}

/// An iterator over the values in a `OrderedMap`.
pub struct Values<'a, K:'a, V:'a> {
iter: iter::Map<'a, (&'a K, &'a V), &'a V, Entries<'a, K, V>>,
iter: Entries<'a, K, V>,
}

impl<'a, K, V> Iterator<&'a V> for Values<'a, K, V> {
fn next(&mut self) -> Option<&'a V> {
self.iter.next()
self.iter.next().map(|e| e.1)
}

fn size_hint(&self) -> (uint, Option<uint>) {
Expand All @@ -227,7 +226,7 @@ impl<'a, K, V> Iterator<&'a V> for Values<'a, K, V> {

impl<'a, K, V> DoubleEndedIterator<&'a V> for Values<'a, K, V> {
fn next_back(&mut self) -> Option<&'a V> {
self.iter.next_back()
self.iter.next_back().map(|e| e.1)
}
}

Expand All @@ -237,7 +236,7 @@ impl<'a, K, V> RandomAccessIterator<&'a V> for Values<'a, K, V> {
}

fn idx(&mut self, index: uint) -> Option<&'a V> {
self.iter.idx(index)
self.iter.idx(index).map(|e| e.1)
}
}

Expand Down

0 comments on commit d96a1e5

Please sign in to comment.