Skip to content

Commit f5dbf7c

Browse files
authored
cmov: (NonZero){u,i}size improvements (#1415)
Implements `Cmov` and `CmovEq` for `NonZeroUsize` and `NonZeroIsize`. Implements slice for size integer types (and their `NonZero*` variants). Co-authored-by: Nics <NicsTr@users.noreply.github.com>
1 parent 8d27449 commit f5dbf7c

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

cmov/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ mod slice;
4141
use core::{
4242
cmp,
4343
num::{
44-
NonZeroI8, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI128, NonZeroU8, NonZeroU16,
45-
NonZeroU32, NonZeroU64, NonZeroU128,
44+
NonZeroI8, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI128, NonZeroIsize, NonZeroU8,
45+
NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU128, NonZeroUsize,
4646
},
4747
};
4848

@@ -312,11 +312,13 @@ impl_cmov_traits_for_nonzero_integers!(
312312
NonZeroI32,
313313
NonZeroI64,
314314
NonZeroI128,
315+
NonZeroIsize,
315316
NonZeroU8,
316317
NonZeroU16,
317318
NonZeroU32,
318319
NonZeroU64,
319-
NonZeroU128
320+
NonZeroU128,
321+
NonZeroUsize
320322
);
321323

322324
impl Cmov for cmp::Ordering {

cmov/src/slice.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use crate::{Cmov, CmovEq, Condition};
44
use core::{
55
cmp,
66
num::{
7-
NonZeroI8, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI128, NonZeroU8, NonZeroU16,
8-
NonZeroU32, NonZeroU64, NonZeroU128,
7+
NonZeroI8, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI128, NonZeroIsize, NonZeroU8,
8+
NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU128, NonZeroUsize,
99
},
1010
ops::{BitOrAssign, Shl},
1111
ptr, slice,
@@ -134,7 +134,7 @@ macro_rules! impl_cmov_with_loop {
134134
}
135135

136136
// These types are large enough we don't need to use anything more complex than a simple loop
137-
impl_cmov_with_loop!(u32, u64, u128);
137+
impl_cmov_with_loop!(u32, u64, u128, usize);
138138

139139
/// Ensure the two provided types have the same size and alignment.
140140
macro_rules! assert_size_and_alignment_eq {
@@ -183,16 +183,19 @@ impl_cmov_with_cast!(
183183
i32 => u32,
184184
i64 => u64,
185185
i128 => u128,
186+
isize => usize,
186187
NonZeroI8 => i8,
187188
NonZeroI16 => i16,
188189
NonZeroI32 => i32,
189190
NonZeroI64 => i64,
190191
NonZeroI128 => i128,
192+
NonZeroIsize => isize,
191193
NonZeroU8 => u8,
192194
NonZeroU16 => u16,
193195
NonZeroU32 => u32,
194196
NonZeroU64 => u64,
195197
NonZeroU128 => u128,
198+
NonZeroUsize => usize,
196199
cmp::Ordering => i8 // #[repr(i8)]
197200
);
198201

@@ -249,7 +252,7 @@ macro_rules! impl_cmoveq_with_loop {
249252
}
250253

251254
// TODO(tarcieri): investigate word-coalescing impls
252-
impl_cmoveq_with_loop!(u16, u32, u64, u128);
255+
impl_cmoveq_with_loop!(u16, u32, u64, u128, usize);
253256

254257
/// Implement [`CmovEq`] traits by casting to a different type that impls the traits.
255258
macro_rules! impl_cmoveq_with_cast {
@@ -280,16 +283,19 @@ impl_cmoveq_with_cast!(
280283
i32 => u32,
281284
i64 => u64,
282285
i128 => u128,
286+
isize => usize,
283287
NonZeroI8 => i8,
284288
NonZeroI16 => i16,
285289
NonZeroI32 => i32,
286290
NonZeroI64 => i64,
287291
NonZeroI128 => i128,
292+
NonZeroIsize => isize,
288293
NonZeroU8 => u8,
289294
NonZeroU16 => u16,
290295
NonZeroU32 => u32,
291296
NonZeroU64 => u64,
292297
NonZeroU128 => u128,
298+
NonZeroUsize => usize,
293299
cmp::Ordering => i8 // #[repr(i8)]
294300
);
295301

0 commit comments

Comments
 (0)