Skip to content

Commit 514f303

Browse files
committed
---
yaml --- r: 125887 b: refs/heads/try c: 74b1aed h: refs/heads/master i: 125885: 25c946e 125883: 0c4f977 125879: 1f261af 125871: b8c43df 125855: 9cbdf47 125823: f3ee14f v: v3
1 parent e663799 commit 514f303

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: f2fa55903e378368ed9173560f03a0ef16e371c2
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 9fc8394d3bce22ab483f98842434c84c396212ae
5-
refs/heads/try: 0b339e09ab5e6b6eb47adef1d82944dc620ac7d3
5+
refs/heads/try: 74b1aed0ec31d9719e585f82f76e8167c26d0c6f
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/src/libcollections/trie.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use core::default::Default;
1818
use core::mem::zeroed;
1919
use core::mem;
2020
use core::uint;
21+
use core::iter;
2122
use std::hash::{Writer, Hash};
2223

2324
use {Collection, Mutable, Map, MutableMap, Set, MutableSet};
@@ -196,6 +197,18 @@ impl<T> TrieMap<T> {
196197
self.root.each_reverse(f)
197198
}
198199

200+
/// Get an iterator visiting all keys in ascending order by the keys.
201+
/// Iterator element type is `uint`.
202+
pub fn keys<'r>(&'r self) -> Keys<'r, T> {
203+
self.iter().map(|(k, _v)| k)
204+
}
205+
206+
/// Get an iterator visiting all values in ascending order by the keys.
207+
/// Iterator element type is `&'r T`.
208+
pub fn values<'r>(&'r self) -> Values<'r, T> {
209+
self.iter().map(|(_k, v)| v)
210+
}
211+
199212
/// Get an iterator over the key-value pairs in the map, ordered by keys.
200213
///
201214
/// # Example
@@ -783,6 +796,14 @@ pub struct MutEntries<'a, T> {
783796
remaining_max: uint
784797
}
785798

799+
/// Forward iterator over the keys of a map
800+
pub type Keys<'a, T> =
801+
iter::Map<'static, (uint, &'a T), uint, Entries<'a, T>>;
802+
803+
/// Forward iterator over the values of a map
804+
pub type Values<'a, T> =
805+
iter::Map<'static, (uint, &'a T), &'a T, Entries<'a, T>>;
806+
786807
// FIXME #5846: see `addr!` above.
787808
macro_rules! item { ($i:item) => {$i}}
788809

@@ -1070,6 +1091,28 @@ mod test_map {
10701091
}
10711092
}
10721093

1094+
#[test]
1095+
fn test_keys() {
1096+
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];
1097+
let map = vec.move_iter().collect::<TrieMap<char>>();
1098+
let keys = map.keys().collect::<Vec<uint>>();
1099+
assert_eq!(keys.len(), 3);
1100+
assert!(keys.contains(&1));
1101+
assert!(keys.contains(&2));
1102+
assert!(keys.contains(&3));
1103+
}
1104+
1105+
#[test]
1106+
fn test_values() {
1107+
let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];
1108+
let map = vec.move_iter().collect::<TrieMap<char>>();
1109+
let values = map.values().map(|&v| v).collect::<Vec<char>>();
1110+
assert_eq!(values.len(), 3);
1111+
assert!(values.contains(&'a'));
1112+
assert!(values.contains(&'b'));
1113+
assert!(values.contains(&'c'));
1114+
}
1115+
10731116
#[test]
10741117
fn test_iteration() {
10751118
let empty_map : TrieMap<uint> = TrieMap::new();

0 commit comments

Comments
 (0)