Skip to content

Commit 3378d48

Browse files
committed
Early out for large needles
1 parent d4eb173 commit 3378d48

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

stdlib/public/core/StringStorageBridge.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ extension Collection {
6363
@_effects(readonly)
6464
func boyerMooreSearch<C>(for needle: C) -> Range<Index>?
6565
where C: BidirectionalCollection, C.Element == Element, Element: Hashable {
66+
if needle.count > count {
67+
return nil
68+
}
69+
if needle.count == count {
70+
return elementsEqual(needle) ? startIndex ..< endIndex : nil
71+
}
6672
var skipTable:[Element : Int] = [:]
6773
skipTable.reserveCapacity(needle.count)
6874
var offset = 0
@@ -83,6 +89,12 @@ extension Collection {
8389
@_effects(readonly)
8490
func boyerMooreSearch<C>(for needle: C) -> Range<Index>?
8591
where C: BidirectionalCollection, C.Element == UInt8, Element == UInt8 {
92+
if needle.count > count {
93+
return nil
94+
}
95+
if needle.count == count {
96+
return elementsEqual(needle) ? startIndex ..< endIndex : nil
97+
}
8698
if needle.count < 256 {
8799
var skipTableStorage: TableStorage =
88100
(0, 0, 0, 0, 0, 0, 0, 0,

0 commit comments

Comments
 (0)