oco_ref

Crates.iooco_ref
lib.rsoco_ref
version0.2.0
sourcesrc
created_at2024-04-16 23:35:31.117491
updated_at2024-04-27 15:27:02.48956
descriptionA smart pointer for storing immutable values with relatively-cheap cloning. (Like a `Cow` meets an `Rc`!)
homepage
repositoryhttps://github.com/leptos-rs/leptos
max_upload_size
id1210832
size21,155
Ben Wishovich (benwis)

documentation

README

This module contains the Oco (Owned Clones Once) smart pointer, which is used to store immutable references to values. This is useful for storing, for example, strings.

Imagine this as an alternative to [Cow] with an additional, reference-counted branch.

use oco_ref::Oco;
use std::sync::Arc;

let static_str = "foo";
let arc_str: Arc<str> = "bar".into();
let owned_str: String = "baz".into();

fn uses_oco(value: impl Into<Oco<'static, str>>) {
    let mut value = value.into();

    // ensures that the value is either a reference, or reference-counted
    // O(n) at worst
    let clone1 = value.clone_inplace();

    // these subsequent clones are O(1)
    let clone2 = value.clone();
    let clone3 = value.clone();
}

uses_oco(static_str);
uses_oco(arc_str);
uses_oco(owned_str);
Commit count: 4252

cargo fmt