From e5689197a9be863ab5df2c17081308c33a3119a6 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 11 Mar 2020 13:06:57 -0400 Subject: [PATCH 1/3] add vecdeque! using with_capacity --- src/lib.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 4993f1b..d476e2d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -60,6 +60,45 @@ macro_rules! hashmap { }; } +#[macro_export(local_inner_macros)] +/// Create a **VecDeque** from a list of values +/// +/// ## Example +/// +/// ``` +/// #[macro_use] extern crate maplit; +/// # fn main() { +/// +/// let deq = vecdeque!{ +/// 1, +/// 2, +/// 3, +/// }; +/// assert_eq!(deq.len(), 3); +/// assert_eq!(deq.capacity(), 3); +/// assert_eq!(deq.get(0), Some(&1)); +/// assert_eq!(deq.get(1), Some(&2)); +/// assert_eq!(deq.get(2), Some(&3)); +/// assert_eq!(deq.get(3), None); +/// # } +/// ``` +macro_rules! vecdeque { + (@single $($x:tt)*) => (()); + (@count $($rest:expr),*) => (<[()]>::len(&[$(vecdeque!(@single $rest)),*])); + + ($($value:expr,)+) => { vecdeque!($($value),+) }; + ($($value:expr),*) => { + { + let _cap = vecdeque!(@count $($value),*); + let mut _map = ::std::collections::VecDeque::with_capacity(_cap); + $( + let _ = _map.push_back($value); + )* + _map + } + }; +} + /// Create a **HashSet** from a list of elements. /// /// ## Example From 649e720bdcc586adf61c57eb3132e161922707e6 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 12 Mar 2020 09:10:54 -0400 Subject: [PATCH 2/3] support slice-like syntax --- src/lib.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index d476e2d..43f39d5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -82,6 +82,19 @@ macro_rules! hashmap { /// assert_eq!(deq.get(3), None); /// # } /// ``` +/// +/// ``` +/// #[macro_use] extern crate maplit; +/// # fn main() { +/// +/// let deq = vecdeque![3; 5]; +/// assert_eq!(deq.len(), 5); +/// assert_eq!(deq.capacity(), 5); +/// assert_eq!(deq.get(0), Some(&3)); +/// assert_eq!(deq.get(4), Some(&3)); +/// assert_eq!(deq.get(5), None); +/// # } +/// ``` macro_rules! vecdeque { (@single $($x:tt)*) => (()); (@count $($rest:expr),*) => (<[()]>::len(&[$(vecdeque!(@single $rest)),*])); @@ -92,11 +105,21 @@ macro_rules! vecdeque { let _cap = vecdeque!(@count $($value),*); let mut _map = ::std::collections::VecDeque::with_capacity(_cap); $( - let _ = _map.push_back($value); + _map.push_back($value); )* _map } }; + ($value:expr;$count:expr) => { + { + let c = $count; + let mut _map = ::std::collections::VecDeque::with_capacity(c); + for _ in 0..c { + _map.push_back($value); + } + _map + } + }; } /// Create a **HashSet** from a list of elements. From 7da23bb01efdf6f666bc2c91099e909f82d5db12 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 12 Mar 2020 11:34:28 -0400 Subject: [PATCH 3/3] fix doc tests --- src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 43f39d5..db200bd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -75,7 +75,6 @@ macro_rules! hashmap { /// 3, /// }; /// assert_eq!(deq.len(), 3); -/// assert_eq!(deq.capacity(), 3); /// assert_eq!(deq.get(0), Some(&1)); /// assert_eq!(deq.get(1), Some(&2)); /// assert_eq!(deq.get(2), Some(&3)); @@ -89,7 +88,6 @@ macro_rules! hashmap { /// /// let deq = vecdeque![3; 5]; /// assert_eq!(deq.len(), 5); -/// assert_eq!(deq.capacity(), 5); /// assert_eq!(deq.get(0), Some(&3)); /// assert_eq!(deq.get(4), Some(&3)); /// assert_eq!(deq.get(5), None);