Crate shared_string[][src]

Split a string without another allocation

Helpfull for some types that need to be parsed from a string and get split into smaller parts like an Url or a Vec containing lines which need to be owned by the parent type.

Note

First try to store references, for example &str which is more efficient.

At the moment if you create a SharedString the underlying bytes cannot be mutated.

Example

use shared_string::SharedString;
// or SharedSyncString if `Sync` is required

struct Name {
	firstname: SharedString,
	middlename: SharedString,
	lastname: SharedString
	// to be faster than string
	// you should use at least 3 fields
}

impl Name {
	pub fn new(fullname: impl Into<SharedString>) -> Option<Self> {
		let mut split = fullname.into().split(b' ');
		Some(Self {
			firstname: split.next()?,
			middlename: split.next()?,
			lastname: split.next()?
		})
	}
}

let name = Name::new("Bartholomew Jojo Simpson").unwrap();
assert_eq!(name.firstname, "Bartholomew");
assert_eq!(name.middlename, "Jojo");
assert_eq!(name.lastname, "Simpson");

Performance

SharedString can increase the perfomance in situations such as the example above by over 30%. See benches/* for benchmarks.

Modules

iter

Iterator types

Structs

SharedGenString

A SharedString, generic over its reference counter.

Traits

RefCounter

A trait to allow SharedString to be generic over any reference counter.

Type Definitions

SharedString

Use SharedString if you only need this type in one thread

SharedSyncString

Use SharedSyncString if you need to pass it between threads