jetscii 0.1.0

A tiny library to efficiently search strings for ASCII characters
docs.rs failed to build jetscii-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: jetscii-0.5.3

Jetscii

A tiny library to efficiently search strings for ASCII characters.

Build Status Current Version

Documentation

Example

use jetscii::AsciiChars;
let mut search = AsciiChars::new();
search.push(b'-');
search.push(b':');
let part_number = "86-J52:rev1";
let parts: Vec<_> = part_number.split(search).collect();
assert_eq!(&parts, &["86", "J52", "rev1"]);

What's so special about this library?

We use a particular x86-64 SSE 4.2 instruction (PCMPESTRI) to gain great speedups. This method stays fast even when searching for one character in a set of up to 8 choices.

When PCMPESTRI is not available, we fall back to a universally-supported byte iterator method.

Benchmarks

Single character

Searching a 5MiB string of as with a single space at the end:

Method Speed
str.find(AsciiChars) 6501 MB/s
`str.as_bytes().iter().position( &v
`str.find( c
str.find(' ') 1085 MB/s
str.find(&[' '][..]) 602 MB/s
str.find(" ") 293 MB/s

Set of characters

Searching a 5MiB string of as with a single ampersand at the end:

Method Speed
str.find(AsciiChars) 6480 MB/s
`str.as_bytes().iter().position( &v
`str.find( c
str.find(&['<', '>', '&'][..]) 361 MB/s

Contributing

  1. Fork it ( https://github.com/shepmaster/jetscii/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Add a failing test.
  4. Add code to pass the test.
  5. Commit your changes (git commit -am 'Add some feature')
  6. Ensure tests pass.
  7. Push to the branch (git push origin my-new-feature)
  8. Create a new Pull Request