parameterize references to u128

This commit is contained in:
Solomon Ucko 2022-08-10 21:04:02 -04:00
parent f890aab454
commit b04ccea008

View File

@ -97,11 +97,11 @@ macro_rules! logic_op {
macro_rules! inline_heap_to_inline { macro_rules! inline_heap_to_inline {
($fun:ident, $typ:ident, $typ_inner:ident; $i:ident, $slice:ident) => { ($fun:ident, $typ:ident, $typ_inner:ident, $typ_inline:ident; $i:ident, $slice:ident) => {
let mut j = 0u128; let mut j = 0;
for i in 0..4 { for i in 0..4 {
j <<= 32; j <<= 32;
j |= $slice[3 - i] as u128; j |= $slice[3 - i] as $typ_inline;
} }
$typ($typ_inner::Inline($i.$fun(j))) $typ($typ_inner::Inline($i.$fun(j)))
} }
@ -159,16 +159,16 @@ macro_rules! heap_heap_return_heap {
} }
macro_rules! heap_heap_return_any { macro_rules! heap_heap_return_any {
($typ:ident, $typ_inner:ident; $res:ident) => { ($typ:ident, $typ_inner:ident, $typ_inline:ident; $res:ident) => {
while $res.len() != 1 && $res[$res.len() - 1] == 0 { while $res.len() != 1 && $res[$res.len() - 1] == 0 {
$res.pop(); $res.pop();
} }
if $res.len() <= 4 { if $res.len() <= 4 {
let mut r = 0u128; let mut r = 0;
for t in 0..$res.len() { for t in 0..$res.len() {
r <<= 32; r <<= 32;
r |= $res[$res.len() - 1 - t] as u128; r |= $res[$res.len() - 1 - t] as $typ_inline;
} }
$typ($typ_inner::Inline(r)) $typ($typ_inner::Inline(r))
} else { } else {
@ -181,9 +181,9 @@ macro_rules! heap_heap_return_any {
logic_op! { logic_op! {
BitAnd, BitAndAssign, SmallUint, SmallUintType, bitand, bitand_assign; BitAnd, BitAndAssign, SmallUint, SmallUintType, bitand, bitand_assign;
i, j, p, q, s, t, slice, slice1, slice2, min, res; i, j, p, q, s, t, slice, slice1, slice2, min, res;
{ inline_heap_to_inline! { bitand, SmallUint, SmallUintType; i, slice } }, { inline_heap_to_inline! { bitand, SmallUint, SmallUintType, u128; i, slice } },
{ heap_heap_create_res_shortest! { bitand; min, slice1, slice2 } }, { heap_heap_create_res_shortest! { bitand; min, slice1, slice2 } },
{ heap_heap_return_any! { SmallUint, SmallUintType; res } } { heap_heap_return_any! { SmallUint, SmallUintType, u128; res } }
} }
logic_op! { logic_op! {
@ -199,7 +199,7 @@ logic_op! {
i, j, p, q, s, t, slice, slice1, slice2, min, res; i, j, p, q, s, t, slice, slice1, slice2, min, res;
{ inline_heap_to_heap! { bitxor_assign, SmallUint, SmallUintType; i, slice } }, { inline_heap_to_heap! { bitxor_assign, SmallUint, SmallUintType; i, slice } },
{ heap_heap_create_res_longest! { bitxor; slice1, slice2, min }}, { heap_heap_create_res_longest! { bitxor; slice1, slice2, min }},
{ heap_heap_return_any! { SmallUint, SmallUintType; res } } { heap_heap_return_any! { SmallUint, SmallUintType, u128; res } }
} }