contain

Crates.iocontain
lib.rscontain
version0.4.0
sourcesrc
created_at2022-09-02 17:04:44.86324
updated_at2022-09-09 12:49:22.853719
descriptionA crate for defining/extending lifetimes
homepage
repositoryhttps://git.samuelcollins.dev/sam/contain-rs
max_upload_size
id657483
size31,292
Samuel Collins (Humandoodlebug)

documentation

README

contain-rs

A crate for defining/extending lifetimes.

Examples

Simple Container

A basic fast implementation of Container backed by Vec.

use contain::{Container, SimpleContainer};

fn append_thing<'a>(container: &'a impl Container<String>, s: &str) -> &'a str {
    container.put(format!("{}thing", s))
}

let container = SimpleContainer::new();
let a = append_thing(&container, "some");
let b = append_thing(&container, "a ");
let c = append_thing(&container, "that ");
assert_eq!(a, "something");
assert_eq!(b, "a thing");
assert_eq!(c, "that thing");
assert_eq!(container.len(), 3)

Deduplicating Container

A deduplicating Container backed by a std::collections::HashSet. If two equal items are stored, the second is dropped and a reference to the first is returned. Whilst more resource-intensive than SimpleContainer, it can be more memory efficient in scenarios where many items are equal and equivalent since the duplicates will be dropped.

use contain::{Container, DeduplicatingContainer};

fn append_thing<'a>(container: &'a impl Container<String>, s: &str) -> &'a str {
    container.put(format!("{}thing", s))
}

let container = DeduplicatingContainer::new();
let a = append_thing(&container, "some");
let b = append_thing(&container, "a ");
let c = append_thing(&container, "some");
assert_eq!(a, "something");
assert_eq!(b, "a thing");
assert_eq!(c, "something");
assert_eq!(container.len(), 2);
Commit count: 0

cargo fmt