Re: [PATCH v2 2/3] rust: alloc: add Vec::resize method

From: Benno Lossin
Date: Tue Mar 18 2025 - 20:50:49 EST


On Tue Mar 18, 2025 at 9:12 PM CET, Tamir Duberstein wrote:
> On Sun, Mar 16, 2025 at 7:17 AM Andrew Ballance
> <andrewjballance@xxxxxxxxx> wrote:
>> + pub fn resize(&mut self, new_len: usize, value: T, flags: Flags) -> Result<(), AllocError> {
>> + if new_len > self.len() {
>> + self.extend_with(new_len - self.len(), value, flags)
>> + } else {
>> + self.truncate(new_len);
>> + Ok(())
>> + }
>> + }
>
> You can avoid underflow checking in debug builds by using `checked_sub`:

`checked_sub` doesn't only avoid underflow in debug builds, but rather
in all builds. But the code below is a good suggestion.

---
Cheers,
Benno

> match new_len.checked_sub(self.len()) {
> Some(n) => self.extend_with(n, value, flags),
> None => {
> self.truncate(new_len);
> Ok(())
> }
> }
>
>> }
>>
>> impl<T, A> Drop for Vec<T, A>
>> --
>> 2.48.1
>>
>>
>
> Either way:
>
> Reviewed-by: Tamir Duberstein <tamird@xxxxxxxxx>