[libc-commits] [PATCH] D86162: [libc] Add two-way strstr algorithm.

Chris Gyurgyik via Phabricator via libc-commits libc-commits at lists.llvm.org
Tue Aug 18 12:00:40 PDT 2020


cgyurgyik created this revision.
cgyurgyik added reviewers: sivachandra, abrachet.
Herald added subscribers: libc-commits, ecnelises, tschuett, mgorny.
Herald added a project: libc-project.
cgyurgyik requested review of this revision.

[libc] This adds the two-way strstr algorithm, and uses it when the length of the haystack is above a certain threshold, for which I picked at random (currently). I look forward to your reviews.

Rationale: The two-way matching algorithm allows for string matching in linear time and constant space complexity. However, it (1) adds a lot of complexity to the code, and (2) Is probably worse when the haystack and needle are small. When this "change-over" occurs for when Two Way >> Brute Force, I am currently unsure. I could write a few benchmarks and get a rough estimate, but looking for input first on the best way to approach this.

As far as testing, both the brute force and the two-way algorithms pass the unit tests and the fuzz test for strstr.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D86162

Files:
  libc/src/string/CMakeLists.txt
  libc/src/string/memchr.cpp
  libc/src/string/string_utils.h
  libc/src/string/strstr.cpp
  libc/test/src/string/CMakeLists.txt
  libc/test/src/string/strstr_test.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86162.286366.patch
Type: text/x-patch
Size: 15265 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20200818/3b11c23a/attachment.bin>


More information about the libc-commits mailing list