Skip to content

A `Cow`-like data structure where owned data is stored inside an `Arc`.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

bevyengine/atomicow

Repository files navigation

atomicow

License Crates.io Downloads Docs

A Cow-like data structure where owned data is stored inside an Arc. Here's what it looks like:

pub enum CowArc<'a, T: ?Sized + 'static> {
    Borrowed(&'a T),
    Static(&'static T),
    Owned(Arc<T>),
}

As implied by the Cow name, this type allows for cheap immutable reference, but can be converted into a shared owned form via cloning when lifetime extension is required.

This data structure is particularly useful for str or other values with a static lifetime, as might be used in structures such as asset paths. A 'static str stored in a CowArc can be cloned without allocations or bookkeeping, while owned values are shared by reference-counting in a thread-safe fashion.

Comparison to the cow_arc crate

The similar cow_arc crate already exists. How does atomicow differ?

Put simply: cow_arc's data structure is just a wrapper over an Arc. While this is exactly what you need in some use cases, the enum structure used in atomicow is both more transparent and more flexible.

Contributing

This crate is maintained by the Bevy organization, and is intended to be tiny, stable, zero-dependency, and broadly useful. Issues and pull requests are genuinely welcome!

About

A `Cow`-like data structure where owned data is stored inside an `Arc`.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages