Diti icon

Cow – Clone on write

Diti | PRO | 04/12/19 03:00:00 PM UTC | 0 ⭐ | 315 👁️ | Never ⏰ | []
Rust |

710 B

|

None

|

0 👍

/

0 👎

// https://doc.rust-lang.org/std/borrow/enum.Cow.html
 
use std::borrow::Cow;
 
fn abs_all(input: &mut Cow<[i32]>) {
    for i in 0..input.len() {
        let v = input[i];
        if v < 0 {
            // Clones into a vector if not already owned.
            input.to_mut()[i] = -v;
        }
    }
}
 
// No clone occurs because `input` doesn't need to be mutated.
let slice = [0, 1, 2];
let mut input = Cow::from(&slice[..]);
abs_all(&mut input);
 
// Clone occurs because `input` needs to be mutated.
let slice = [-1, 0, 1];
let mut input = Cow::from(&slice[..]);
abs_all(&mut input);
 
// No clone occurs because `input` is already owned.
let mut input = Cow::from(vec![-1, 0, 1]);
abs_all(&mut input);

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎