numas/array/
slice.rs

1/// Returns indices for slicing, each dimension separated with ';' and range with '=>'
2///
3/// # Examples
4///
5/// ```
6/// #[macro_use] extern crate numas;
7///
8/// assert_eq!(s![1; 5 => 2; 3], vec![1, 0, 5, 2, 3, 0]);
9/// assert_eq!(s![1; 5; 2; 3], vec![1, 0, 5, 0, 2, 0, 3, 0]);
10/// ```
11#[macro_export]
12macro_rules! s {
13    ($($( $y:expr )=>*);*) => (
14        {
15            let mut vec: Vec<usize> = Vec::new();
16
17            $(
18                tuple![vec; $( $y ),*];
19            )*
20
21            vec
22        }
23    )
24}
25
26/// Adds to vector always two values, if only one value provided use zero instead
27///
28/// # Examples
29///
30/// ```
31/// #[macro_use] extern crate numas;
32///
33/// let mut vec: Vec<i32> = Vec::new();
34/// tuple![vec; 1, 5];
35/// assert_eq!(vec, vec![1, 5]);
36///
37/// tuple![vec; 5];
38/// assert_eq!(vec, vec![1, 5, 5, 0])
39/// ```
40#[macro_export]
41macro_rules! tuple {
42    ($vec:expr; $y:expr, $x:expr) => {
43        $vec.push($y);
44        $vec.push($x);
45    };
46
47    ($vec:expr; $y:expr) => {
48        $vec.push($y);
49        $vec.push(0);
50    };
51}