2 unstable releases
0.2.0 | Oct 12, 2024 |
---|---|
0.1.0 | Sep 9, 2024 |
#101 in No standard library
96 downloads per month
145KB
2.5K
SLoC
gstr
GStr
GStr
is an immutable string implementation optimized for small strings and comparison.
The size of GStr
or Option<GStr>
is guaranteed to be 16 bytes on 64-bit platforms or 12 bytes on 32-bit platforms.
The first 4 bytes of the string buffer are inlined in GStr
, so comparing two GStr
s is faster than comparing two str
s in most cases.
The maximum length of GStr
is i32::MAX
.
SharedGStr
SharedGStr
is similar to GStr
, but using the atomic reference counting internally, so cloning a SharedGStr
only takes O(1)
time.
The maximum length of SharedGStr
is i32::MAX
on 64-bit platforms or i32::MAX - 7
on 32-bit platforms.
Usage
use gstr::GStr;
// This clones the string into the heap memory.
let gstr = GStr::new("Hello, World!");
assert_eq!(gstr, "Hello, World!");
// `GStr` can be constructed from a static string in const context without allocating memory.
let gstr = const { GStr::from_static("Hello, Rust!") };
assert_eq!(gstr, "Hello, Rust!");
// `GStr` can be converted from `String` without allocating memory.
let gstr = GStr::from_string(String::from("Hello, 🦀 and 🌎!"));
assert_eq!(gstr, "Hello, 🦀 and 🌎!");
Features
gstr
supports no_std
, but needs the alloc
crate to work.
gstr
has the following features:
std
: Enable support for some types instd
. It's enabled by default.serde
: Enable serialization and deserialization support forserde
.rkyv
: Enable serialization and deserialization support forrkyv
.
Warnings
gstr
is not tested on big-endian platforms, but it maybe works fine on them.
Dependencies
~0–390KB