beef

Alternative implementation of Cow that's more compact in memory.

```rust use beef::Cow;

let borrowed = Cow::borrowed("Hello"); let owned = Cow::from(String::from("World"));

assert_eq!( format!("{} {}!", borrowed, owned), "Hello World!", );

// beef::Cow is 3 word sized, while std::borrow::Cow is 4 word sized assert!(std::mem::sizeof::>() < std::mem::sizeof::>()); ```

How does it work?

The standard library Cow is an enum with two variants:

rust pub enum Cow<'a, B> where B: 'a + ToOwned + ?Sized, { Borrowed(&'a B), Owned(<B as ToOwned>::Owned), }

For the most common pairs of values - &str and String, or &[u8] and Vec<u8> - this means that the entire enum is 4 words wide:

```text Padding | v +----------+----------+----------+----------+ Borrowed: | Tag | Pointer | Length | XXXXXXXX | +----------+----------+----------+----------+

      +----------+----------+----------+----------+

Owned: | Tag | Pointer | Length | Capacity | +----------+----------+----------+----------+ ```

Instead of being an enum with a tag, beef::Cow uses capacity to determine whether the value it's holding is owned (capacity is greater than 0), or borrowed (capacity is 0).