Skip to content

Commit 404750f

Browse files
committed
Capacity set by macro
1 parent 50864a4 commit 404750f

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/lib.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,8 @@ impl<K: Eq, V> Into<Vec<(K, V)>> for LinearMap<K, V> {
299299
}
300300
}
301301

302-
/// Creates a `LinearMap` from a list of key-value pairs.
302+
/// Creates a `LinearMap` from a list of key-value pairs. The created
303+
/// `LinearMap` has a capacity set to the number of entries provided.
303304
///
304305
/// ## Example
305306
///
@@ -318,11 +319,13 @@ impl<K: Eq, V> Into<Vec<(K, V)>> for LinearMap<K, V> {
318319
/// ```
319320
#[macro_export]
320321
macro_rules! linear_map {
321-
// trailing comma case
322-
($($key:expr => $value:expr,)+) => (linear_map!($($key => $value),+));
323-
( $($key:expr => $value:expr),* ) => {
322+
(@single $($x:tt)*) => (());
323+
(@count $($rest:expr),*) => (<[()]>::len(&[$(linear_map!(@single $rest)),*]));
324+
($($key:expr => $value:expr,)+) => { linear_map!($($key => $value),+) };
325+
($($key:expr => $value:expr),*) => {
324326
{
325-
let mut _map = $crate::LinearMap::new();
327+
let _cap = linear_map!(@count $($key),*);
328+
let mut _map = $crate::LinearMap::with_capacity(_cap);
326329
$(
327330
_map.insert($key, $value);
328331
)*
@@ -896,12 +899,14 @@ mod test {
896899
2 => "two",
897900
};
898901
assert_eq!(names.len(), 2);
902+
assert_eq!(names.capacity(), 2);
899903
assert_eq!(names[&1], "one");
900904
assert_eq!(names[&2], "two");
901905
assert_eq!(names.get(&3), None);
902906

903907
let empty: LinearMap<i32, i32> = linear_map!{};
904908
assert_eq!(empty.len(), 0);
909+
assert_eq!(empty.capacity(), 0);
905910

906911
let _nested_compiles = linear_map!{
907912
1 => linear_map!{0 => 1 + 2,},

0 commit comments

Comments
 (0)