1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
(deny(missing_doc)) //! Useful macro for doing repetetive operations in batch #[macro_export] /// Negate all passed variables /// # Example /// ``` /// use many_op::negate; /// let mut testvals = [true, false, true]; /// negate! { /// testvals[0]; /// testvals[2]; /// }; /// assert_eq!(testvals, [false, false, false]); /// ``` macro_rules! negate { ($($e:expr;)*) => { $crate::do_for!(unary !, $($e;)*) }; } #[macro_export] /// Do an operation for all following variables /// # Examples /// ``` /// use many_op::do_for; /// let mut testvals = [true, true, true]; /// do_for! {unary !, /// testvals[0]; /// testvals[2]; /// }; /// assert_eq!(testvals, [false, true, false]); /// ``` /// ``` /// use many_op::do_for; /// let mut testvals = [true, false, true]; /// do_for! {binary ^, testvals[0];testvals[2];}; /// assert_eq!(testvals, [false, false, false]); /// ``` /// ``` /// use many_op::do_for; /// let mut testvals = [1, 2, 3]; /// do_for! {assign +=, testvals[0]; testvals[2];} /// assert_eq!(testvals, [2, 2, 6]) /// ``` /// ``` /// use many_op::do_for; /// let mut testvals = [1, 2, 3]; /// do_for! {binary +, testvals[0] => testvals[1]; testvals[2] => testvals[0];} /// assert_eq!(testvals, [3, 2, 6]) /// ``` macro_rules! do_for { (binary $op:tt, $($i:expr;)*) => { $($i = $i $op $i);* }; (binary $op:tt, $($i:expr => $e:expr;)*) => { $($i = $i $op $e);* }; (unary $op:tt, $($i:expr;)*) => { $($i = $op $i);* }; (assign $a_op:tt, $($i:expr;)*) => { $($i $a_op $i);* }; } mod tests { #[test] fn binary_two_ops() { let mut testvals = [1, 2, 3]; do_for! {binary +, testvals[0] => testvals[1]; testvals[2] => testvals[0];} assert_eq!(testvals, [3, 2, 6]) } }