Skip to content

Count and convert between various ways of indexing utf8 string slices.

License

Notifications You must be signed in to change notification settings

CeleritasCelery/str_indices

 
 

Repository files navigation

Str Indices

Latest Release Documentation

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.

Feature Flags

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.

Unsafe Code

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!

License

This project is licensed under either of

at your option.

Contributing

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.

About

Count and convert between various ways of indexing utf8 string slices.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%