Skip to content

Commit 4b17bc5

Browse files
committed
map like set like
1 parent 5c82d64 commit 4b17bc5

File tree

3 files changed

+91
-16
lines changed

3 files changed

+91
-16
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "batch_oper"
3-
version = "2.2.0"
3+
version = "2.3.0"
44
authors = ["BatchOperator", "2A5F <u2a5f@outlook.com>"]
55
edition = "2018"
66
description = "batch_oper provides some batch operation macro for some operations"

src/macro_lit.rs

+74-15
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ macro_rules! arr {
5858
macro_rules! deque {
5959
[] => { std::collections::VecDeque::new() };
6060
[ $elem:expr; $n:expr ] => { std::collections::VecDeque::from(vec![$elem; $n]) };
61-
[ $($e:expr),+ $(,)? ] => { std::collections::VecDeque::from(vec![$($e),+]) };
61+
[ $($e:expr),* $(,)? ] => { std::collections::VecDeque::from(vec![$($e),+]) };
6262
}
6363

6464
/// new a `LinkedList<T>`
@@ -144,14 +144,14 @@ macro_rules! list {
144144
}
145145
l
146146
}};
147-
[ $($e:expr),+ $(,)? ] => {{
147+
[ $($e:expr),* $(,)? ] => {{
148148
let mut l = std::collections::LinkedList::new();
149-
$( l.push_back($e); )+
149+
$( l.push_back($e); )*
150150
l
151151
}};
152-
[ <- $($e:expr),+ $(,)? ] => {{
152+
[ <- $($e:expr),* $(,)? ] => {{
153153
let mut l = std::collections::LinkedList::new();
154-
$( l.push_front($e); )+
154+
$( l.push_front($e); )*
155155
l
156156
}};
157157
}
@@ -179,14 +179,45 @@ macro_rules! list {
179179
/// }
180180
/// # ;
181181
/// ```
182+
/// ---
183+
/// map like
184+
/// ```
185+
/// # use batch_oper::*;
186+
/// # use std::collections::*;
187+
/// # let ka = 1; let va = 2; let kb = 3; let vb = 4;
188+
/// map! { let BTreeMap::new();
189+
/// ka => va,
190+
/// kb => vb,
191+
/// }
192+
/// # ;
193+
/// ```
194+
/// *equivalent to*
195+
/// ```
196+
/// # use std::collections::*;
197+
/// # let ka = 1; let va = 2; let kb = 3; let vb = 4;
198+
/// {
199+
/// let mut m = BTreeMap::new();
200+
/// m.insert(ka, va);
201+
/// m.insert(kb, vb);
202+
/// m
203+
/// }
204+
/// # ;
205+
/// ```
182206
#[macro_export]
183207
macro_rules! map {
184208
{ } => { std::collections::HashMap::new() };
185-
{ $($k:expr => $v:expr),+ $(,)? } => {{
209+
{ $($k:expr => $v:expr),* $(,)? } => {{
186210
let mut m = std::collections::HashMap::new();
187211
$(
188212
m.insert($k, $v);
189-
)+
213+
)*
214+
m
215+
}};
216+
{ let $m:expr; $($k:expr => $v:expr),* $(,)? } => {{
217+
let mut m = $m;
218+
$(
219+
m.insert($k, $v);
220+
)*
190221
m
191222
}};
192223
}
@@ -217,11 +248,11 @@ macro_rules! map {
217248
#[macro_export]
218249
macro_rules! btmap {
219250
{ } => { std::collections::BTreeMap::new() };
220-
{ $($k:expr => $v:expr),+ $(,)? } => {{
251+
{ $($k:expr => $v:expr),* $(,)? } => {{
221252
let mut m = std::collections::BTreeMap::new();
222253
$(
223254
m.insert($k, $v);
224-
)+
255+
)*
225256
m
226257
}};
227258
}
@@ -249,10 +280,10 @@ macro_rules! btmap {
249280
/// ```
250281
#[macro_export]
251282
macro_rules! map_append {
252-
{ $m:expr; $($k:expr => $v:expr),+ $(,)? } => {
283+
{ $m:expr; $($k:expr => $v:expr),* $(,)? } => {
253284
$(
254285
$m.insert($k, $v);
255-
)+
286+
)*
256287
};
257288
}
258289

@@ -276,14 +307,42 @@ macro_rules! map_append {
276307
/// }
277308
/// # ;
278309
/// ```
310+
/// ---
311+
/// set like
312+
/// ```
313+
/// # use batch_oper::*;
314+
/// # use std::collections::*;
315+
/// # let a = 1; let b = 2;
316+
/// set![let BTreeSet::new(); 1, 2]
317+
/// # ;
318+
/// ```
319+
/// *equivalent to*
320+
/// ```
321+
/// # use std::collections::*;
322+
/// # let a = 1; let b = 2;
323+
/// {
324+
/// let mut s = BTreeSet::new();
325+
/// s.insert(a);
326+
/// s.insert(b);
327+
/// s
328+
/// }
329+
/// # ;
330+
/// ```
279331
#[macro_export]
280332
macro_rules! set {
281333
{ } => { std::collections::HashSet::new() };
282-
{ $($e:expr),+ $(,)? } => {{
334+
{ $($e:expr),* $(,)? } => {{
283335
let mut s = std::collections::HashSet::new();
284336
$(
285337
s.insert($e);
286-
)+
338+
)*
339+
s
340+
}};
341+
{ let $s:expr; $($e:expr),* $(,)? } => {{
342+
let mut s = $s;
343+
$(
344+
s.insert($e);
345+
)*
287346
s
288347
}};
289348
}
@@ -311,11 +370,11 @@ macro_rules! set {
311370
#[macro_export]
312371
macro_rules! btset {
313372
{ } => { std::collections::BTreeSet::new() };
314-
{ $($e:expr),+ $(,)? } => {{
373+
{ $($e:expr),* $(,)? } => {{
315374
let mut s = std::collections::BTreeSet::new();
316375
$(
317376
s.insert($e);
318-
)+
377+
)*
319378
s
320379
}};
321380
}

src/tests.rs

+16
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,19 @@ fn test_using() {
8484
}
8585
})
8686
}
87+
88+
#[test]
89+
fn test_macro_map_map_like() {
90+
use std::collections::BTreeMap;
91+
92+
map! { let BTreeMap::new();
93+
1 => 2
94+
};
95+
}
96+
97+
#[test]
98+
fn test_macro_set_set_like() {
99+
use std::collections::BTreeSet;
100+
101+
set![let BTreeSet::new(); 1, 2];
102+
}

0 commit comments

Comments
 (0)