1 | #[doc (hidden)]
|
2 | #[macro_export (local_inner_macros)]
|
3 | macro_rules! _overload_binary {
|
4 | (+, $($t:tt)+) => (_overload_binary_internal!(Add, add, $($t)+););
|
5 | (-, $($t:tt)+) => (_overload_binary_internal!(Sub, sub, $($t)+););
|
6 | (*, $($t:tt)+) => (_overload_binary_internal!(Mul, mul, $($t)+););
|
7 | (/, $($t:tt)+) => (_overload_binary_internal!(Div, div, $($t)+););
|
8 | (%, $($t:tt)+) => (_overload_binary_internal!(Rem, rem, $($t)+););
|
9 | (&, $($t:tt)+) => (_overload_binary_internal!(BitAnd, bitand, $($t)+););
|
10 | (|, $($t:tt)+) => (_overload_binary_internal!(BitOr, bitor, $($t)+););
|
11 | (^, $($t:tt)+) => (_overload_binary_internal!(BitXor, bitxor, $($t)+););
|
12 | (<<, $($t:tt)+) => (_overload_binary_internal!(Shl, shl, $($t)+););
|
13 | (>>, $($t:tt)+) => (_overload_binary_internal!(Shr, shr, $($t)+););
|
14 | }
|
15 |
|
16 | #[doc (hidden)]
|
17 | #[macro_export (local_inner_macros)]
|
18 | macro_rules! _overload_binary_internal {
|
19 | ($op_trait:ident, $op_fn:ident, $li:ident, $lt:ty, $ri:ident, $rt:ty, $out:ty, $body:block) => (
|
20 | impl ops::$op_trait<$rt> for $lt {
|
21 | type Output = $out;
|
22 | fn $op_fn(self, $ri: $rt) -> Self::Output {
|
23 | let $li = self;
|
24 | $body
|
25 | }
|
26 | }
|
27 | );
|
28 | }
|
29 | |