Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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);
Advertisement
Add Comment
Please, Sign In to add comment