[go: up one dir, main page]

Module memchr

Module memchr 

Source
Expand description

Provides architecture independent implementations of memchr and friends.

The main types in this module are One, Two and Three. They are for searching for one, two or three distinct bytes, respectively, in a haystack. Each type also has corresponding double ended iterators. These searchers are typically slower than hand-coded vector routines accomplishing the same task, but are also typically faster than naive scalar code. These routines effectively work by treating a usize as a vector of 8-bit lanes, and thus achieves some level of data parallelism even without explicit vector support.

The One searcher also provides a One::count routine for efficiently counting the number of times a single byte occurs in a haystack. This is useful, for example, for counting the number of lines in a haystack. This routine exists because it is usually faster, especially with a high match count, than using One::find repeatedly. (OneIter specializes its Iterator::count implementation to use this routine.)

Only one, two and three bytes are supported because three bytes is about the point where one sees diminishing returns. Beyond this point and it’s probably (but not necessarily) better to just use a simple [bool; 256] array or similar. However, it depends mightily on the specific work-load and the expected match frequency.

Structs§

One
Finds all occurrences of a single byte in a haystack.
OneIter
An iterator over all occurrences of a single byte in a haystack.
Three
Finds all occurrences of three bytes in a haystack.
ThreeIter
An iterator over all occurrences of three possible bytes in a haystack.
Two
Finds all occurrences of two bytes in a haystack.
TwoIter
An iterator over all occurrences of two possible bytes in a haystack.