-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add functions to add unsigned and signed integers #87601
Conversation
r? @kennytm (rust-highfive has picked a reviewer for you, use r? to override) |
What are two (different from each other) use cases? |
I've wanted both the checked and the wrapping versions of this many times. |
Possibly-silly question: shouldn't there also be |
Yes, I think that it would be less useful but certainly more consistent. Also in this case we would need |
☔ The latest upstream changes (presumably #87408) made this pull request unmergeable. Please resolve the merge conflicts. |
23fb4c9
to
b3f4edf
Compare
Fixed conflicts, added tracking issue, added signed with unsigned operations and renamed feature. |
☔ The latest upstream changes (presumably #88535) made this pull request unmergeable. Please resolve the merge conflicts. |
b3f4edf
to
2132a9f
Compare
☔ The latest upstream changes (presumably #89414) made this pull request unmergeable. Please resolve the merge conflicts. |
2132a9f
to
9faf621
Compare
Rebased |
Co-authored-by: kennytm <[email protected]>
This comment has been minimized.
This comment has been minimized.
@bors r+ |
📌 Commit 47edde1 has been approved by |
…ennytm Add functions to add unsigned and signed integers This PR adds methods to unsigned integers to add signed integers with good overflow semantics under `#![feature(mixed_integer_ops)]`. The added API is: ```rust // `uX` is `u8`, `u16`, `u32`, `u64`,`u128`, `usize` impl uX { pub const fn checked_add_signed(self, iX) -> Option<Self>; pub const fn overflowing_add_signed(self, iX) -> (Self, bool); pub const fn saturating_add_signed(self, iX) -> Self; pub const fn wrapping_add_signed(self, iX) -> Self; } impl iX { pub const fn checked_add_unsigned(self, uX) -> Option<Self>; pub const fn overflowing_add_unsigned(self, uX) -> (Self, bool); pub const fn saturating_add_unsigned(self, uX) -> Self; pub const fn wrapping_add_unsigned(self, uX) -> Self; pub const fn checked_sub_unsigned(self, uX) -> Option<Self>; pub const fn overflowing_sub_unsigned(self, uX) -> (Self, bool); pub const fn saturating_sub_unsigned(self, uX) -> Self; pub const fn wrapping_sub_unsigned(self, uX) -> Self; } ``` Maybe it would be interesting to also have `add_signed` that panics in debug and wraps in release ?
⌛ Testing commit 47edde1 with merge 7d03fb603a9cca45cb32a9050881bce9f491746e... |
💔 Test failed - checks-actions |
A job failed! Check out the build log: (web) (plain) Click to see the possible cause of the failure (guessed by this bot)
|
This looks like a spurious network error :/ |
…arth Rollup of 12 pull requests Successful merges: - rust-lang#87601 (Add functions to add unsigned and signed integers) - rust-lang#88523 (Expand documentation for `FpCategory`.) - rust-lang#89050 (refactor: VecDeques Drain fields to private) - rust-lang#89245 (refactor: make VecDeque's IterMut fields module-private, not just crate-private) - rust-lang#89324 (Rename `std::thread::available_conccurrency` to `std::thread::available_parallelism`) - rust-lang#89329 (print-type-sizes: skip field printing for primitives) - rust-lang#89501 (Note specific regions involved in 'borrowed data escapes' error) - rust-lang#89506 (librustdoc: Use correct heading levels.) - rust-lang#89528 (Fix suggestion to borrow when casting from pointer to reference) - rust-lang#89531 (library std, libc dependency update) - rust-lang#89588 (Add a test for generic_const_exprs) - rust-lang#89591 (fix: alloc-optimisation is only for rust llvm) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This PR adds methods to unsigned integers to add signed integers with good overflow semantics under
#![feature(mixed_integer_ops)]
.The added API is:
Maybe it would be interesting to also have
add_signed
that panics in debug and wraps in release ?