]>
Commit | Line | Data |
---|---|---|
8bb4bdeb XL |
1 | This crate provides a safe interface `libc`'s `memchr` and `memrchr`. |
2 | This crate also provides fallback implementations when either function is | |
3 | unavailable. | |
4 | ||
5 | [![Build status](https://api.travis-ci.org/BurntSushi/rust-memchr.png)](https://travis-ci.org/BurntSushi/rust-memchr) | |
6 | [![Build status](https://ci.appveyor.com/api/projects/status/8i9484t8l4w7uql0/branch/master?svg=true)](https://ci.appveyor.com/project/BurntSushi/rust-memchr/branch/master) | |
7 | [![](http://meritbadge.herokuapp.com/memchr)](https://crates.io/crates/memchr) | |
8 | ||
9 | Dual-licensed under MIT or the [UNLICENSE](http://unlicense.org). | |
10 | ||
11 | ||
12 | ### Documentation | |
13 | ||
14 | [https://docs.rs/memchr](https://docs.rs/memchr) | |
15 | ||
16 | ### no_std | |
17 | ||
18 | memchr links to the standard library by default, but you can disable the | |
19 | `use_std` feature if you want to use it in a `#![no_std]` crate: | |
20 | ||
21 | ```toml | |
22 | [dependencies] | |
23 | memchr = { version = "1.0", default-features = false } | |
24 | ``` | |
25 | ||
26 | ### Performance | |
27 | ||
28 | On my system (Linux/amd64), `memchr` is about an order of magnitude faster than | |
29 | the more idiomatic `haystack.iter().position(|&b| b == needle)`: | |
30 | ||
31 | ``` | |
32 | test iterator ... bench: 5,280 ns/iter (+/- 13) = 1893 MB/s | |
33 | test iterator_reversed ... bench: 5,271 ns/iter (+/- 7) = 1897 MB/s | |
34 | test libc_memchr ... bench: 202 ns/iter (+/- 0) = 49504 MB/s | |
35 | test libc_memrchr ... bench: 197 ns/iter (+/- 1) = 50761 MB/s | |
36 | ``` |