Count and convert between different indexing schemes on utf8 string slices.
The following schemes are currently supported:
- Chars (Unicode scalar values).
- UTF16 code units.
- Lines, with three options for recognized line break characters:
- Line feed only.
- Line feed and carriage return.
- All Unicode line break characters, as specified in Unicode Annex #14.
The simd
feature flag (enabled by default) enables explicit SIMD
optimizations on supported platforms. Disabling it will use the
fallback scalar code path on all platforms. This feature flag only
affects performance, not behavior.
Str Indices uses unsafe code for performance optimizations, primarily for SIMD intrinsics. The unsafe code is kept minimal, mostly compartmentalized, and easy to audit. The entire code base is also fuzz tested.
If you would like to run the fuzz testing suite yourself, install Rust nightly and cargo fuzz and run the following command from the repository root:
cargo +nightly fuzz run random_strings
Additional runs of the fuzz testing suite are very much appreciated, as is general auditing of the code base. If you find any unsoundness, please file an issue!
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Str Indices by you will be licensed as above, without any additional terms or conditions.
This crate is no-std, doesn't allocate, and has zero dependencies, and aims to remain that way. Please adhere to this in any submitted contributions.