Add one more example for Cow that shows how to keep Cow in a struct
This commit is contained in:
parent
78ec12df02
commit
931eb4c4d5
1 changed files with 34 additions and 0 deletions
|
|
@ -141,6 +141,40 @@ impl<T> ToOwned for T
|
|||
/// let mut input = Cow::from(vec![-1, 0, 1]);
|
||||
/// abs_all(&mut input);
|
||||
/// ```
|
||||
///
|
||||
/// ```
|
||||
/// use std::borrow::{Cow, ToOwned};
|
||||
///
|
||||
/// struct Items<'a, X: 'a> where [X]: ToOwned<Owned=Vec<X>> {
|
||||
/// values: Cow<'a, [X]>,
|
||||
/// }
|
||||
///
|
||||
/// impl<'a, X: Clone + 'a> Items<'a, X> where [X]: ToOwned<Owned=Vec<X>> {
|
||||
/// fn new(v: Cow<'a, [X]>) -> Self {
|
||||
/// Items { values: v }
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// // Creates a container from borrowed values of a slice
|
||||
/// let readonly = [1, 2];
|
||||
/// let borrowed = Items::new((&readonly[..]).into());
|
||||
/// match borrowed {
|
||||
/// Items { values: Cow::Borrowed(b) } => println!("borrowed {:?}", b),
|
||||
/// _ => panic!("expect borrowed value"),
|
||||
/// }
|
||||
///
|
||||
/// let mut clone_on_write = borrowed;
|
||||
/// // Mutates the data from slice into owned vec and pushes a new value on top
|
||||
/// clone_on_write.values.to_mut().push(3);
|
||||
/// println!("clone_on_write = {:?}", clone_on_write.values);
|
||||
///
|
||||
/// // The data was mutated. Let check it out.
|
||||
/// match clone_on_write {
|
||||
/// Items { values: Cow::Owned(_) } => println!("clone_on_write contains owned data"),
|
||||
/// _ => panic!("expect owned data"),
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub enum Cow<'a, B: ?Sized + 'a>
|
||||
where B: ToOwned
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue