macro_rules! dispatch_arith {
(
$left:expr, $right:expr;
fixed: $fh:ident, arb: $ah:ident ($ctx:expr, $target:expr, $fragment:expr);
$($extra:tt)*
) => {
dispatch_arith!(@rows
($left, $right) $fh $ah ($ctx, $target, $fragment)
[Float4 Float8 Int1 Int2 Int4 Int8 Int16 Uint1 Uint2 Uint4 Uint8 Uint16]
{$($extra)*}
{}
)
};
(@rows
($left:expr, $right:expr) $fh:ident $ah:ident ($ctx:expr, $target:expr, $fragment:expr)
[$L:ident $($rest:ident)*]
{$($extra:tt)*}
{$($acc:tt)*}
) => {
dispatch_arith!(@rows
($left, $right) $fh $ah ($ctx, $target, $fragment)
[$($rest)*]
{$($extra)*}
{
$($acc)*
(ColumnData::$L(l), ColumnData::Float4(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Float8(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int1(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int2(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int4(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int8(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int16(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint1(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint2(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint4(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint8(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint16(r)) => $fh($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::$L(l), ColumnData::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
}
)
};
(@rows
($left:expr, $right:expr) $fh:ident $ah:ident ($ctx:expr, $target:expr, $fragment:expr)
[]
{$($extra:tt)*}
{$($acc:tt)*}
) => {
match ($left, $right) {
$($acc)*
(ColumnData::Int { container: l, .. }, ColumnData::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Int { container: l, .. }, ColumnData::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Uint { container: l, .. }, ColumnData::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Float4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Float8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint1(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint2(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint4(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint8(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint16(r)) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Int { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Uint { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
(ColumnData::Decimal { container: l, .. }, ColumnData::Decimal { container: r, .. }) => $ah($ctx, l, r, $target, $fragment),
$($extra)*
}
};
}
pub mod add;
pub mod div;
pub mod mul;
pub mod rem;
pub mod sub;