Skip to content

Commit 5f57113

Browse files
deps: update nbytes to 0.1.2
1 parent 282d30e commit 5f57113

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

deps/nbytes/include/nbytes.h

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <cmath>
55
#include <cstddef>
66
#include <cstdint>
7+
#include <cstdlib>
78
#include <cstring>
89
#include <string>
910

@@ -548,7 +549,11 @@ size_t StringSearch<Char>::BoyerMooreSearch(Vector subject,
548549
size_t start = start_;
549550

550551
int *bad_char_occurrence = bad_char_shift_table_;
551-
int *good_suffix_shift = good_suffix_shift_table_ - start_;
552+
553+
auto good_suffix_get = [&](size_t idx) -> int {
554+
if (idx < start || idx - start > kBMMaxShift) return 0;
555+
return good_suffix_shift_table_[idx - start];
556+
};
552557

553558
Char last_char = pattern_[pattern_length - 1];
554559
size_t index = start_index;
@@ -575,7 +580,7 @@ size_t StringSearch<Char>::BoyerMooreSearch(Vector subject,
575580
index +=
576581
pattern_length - 1 - CharOccurrence(bad_char_occurrence, last_char);
577582
} else {
578-
int gs_shift = good_suffix_shift[j + 1];
583+
int gs_shift = good_suffix_get(j + 1);
579584
int bc_occ = CharOccurrence(bad_char_occurrence, c);
580585
int shift = j - bc_occ;
581586
if (gs_shift > shift) {
@@ -591,22 +596,25 @@ size_t StringSearch<Char>::BoyerMooreSearch(Vector subject,
591596
template <typename Char>
592597
void StringSearch<Char>::PopulateBoyerMooreTable() {
593598
const size_t pattern_length = pattern_.length();
594-
// Only look at the last kBMMaxShift characters of pattern (from start_
595-
// to pattern_length).
596599
const size_t start = start_;
597600
const size_t length = pattern_length - start;
598601

599-
// Biased tables so that we can use pattern indices as table indices,
600-
// even if we only cover the part of the pattern from offset start.
601-
int *shift_table = good_suffix_shift_table_ - start_;
602-
int *suffix_table = suffix_table_ - start_;
602+
auto shift_get = [&](size_t idx) -> int & {
603+
if (idx < start) abort();
604+
return good_suffix_shift_table_[idx - start];
605+
};
606+
607+
auto suffix_get = [&](size_t idx) -> int & {
608+
if (idx < start) abort();
609+
return suffix_table_[idx - start];
610+
};
603611

604612
// Initialize table.
605613
for (size_t i = start; i < pattern_length; i++) {
606-
shift_table[i] = length;
614+
shift_get(i) = length;
607615
}
608-
shift_table[pattern_length] = 1;
609-
suffix_table[pattern_length] = pattern_length + 1;
616+
shift_get(pattern_length) = 1;
617+
suffix_get(pattern_length) = pattern_length + 1;
610618

611619
if (pattern_length <= start) {
612620
return;
@@ -620,34 +628,35 @@ void StringSearch<Char>::PopulateBoyerMooreTable() {
620628
while (i > start) {
621629
Char c = pattern_[i - 1];
622630
while (suffix <= pattern_length && c != pattern_[suffix - 1]) {
623-
if (static_cast<size_t>(shift_table[suffix]) == length) {
624-
shift_table[suffix] = suffix - i;
631+
if (static_cast<size_t>(shift_get(suffix)) == length) {
632+
shift_get(suffix) = suffix - i;
625633
}
626-
suffix = suffix_table[suffix];
634+
suffix = suffix_get(suffix);
627635
}
628-
suffix_table[--i] = --suffix;
636+
suffix_get(--i) = --suffix;
629637
if (suffix == pattern_length) {
630638
// No suffix to extend, so we check against last_char only.
631639
while ((i > start) && (pattern_[i - 1] != last_char)) {
632-
if (static_cast<size_t>(shift_table[pattern_length]) == length) {
633-
shift_table[pattern_length] = pattern_length - i;
640+
if (static_cast<size_t>(shift_get(pattern_length)) == length) {
641+
shift_get(pattern_length) = pattern_length - i;
634642
}
635-
suffix_table[--i] = pattern_length;
643+
suffix_get(--i) = pattern_length;
636644
}
637645
if (i > start) {
638-
suffix_table[--i] = --suffix;
646+
suffix_get(--i) = --suffix;
639647
}
640648
}
641649
}
642650
}
651+
643652
// Build shift table using suffixes.
644653
if (suffix < pattern_length) {
645654
for (size_t i = start; i <= pattern_length; i++) {
646-
if (static_cast<size_t>(shift_table[i]) == length) {
647-
shift_table[i] = suffix - start;
655+
if (static_cast<size_t>(shift_get(i)) == length) {
656+
shift_get(i) = suffix - start;
648657
}
649658
if (i == suffix) {
650-
suffix = suffix_table[suffix];
659+
suffix = suffix_get(suffix);
651660
}
652661
}
653662
}

deps/nbytes/src/nbytes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ void ForceAscii(const char *src, char *dst, size_t len) {
205205
ForceAsciiSlow(src, dst, unalign);
206206
src += unalign;
207207
dst += unalign;
208-
len -= src_unalign;
208+
len -= unalign;
209209
} else {
210210
ForceAsciiSlow(src, dst, len);
211211
return;

0 commit comments

Comments
 (0)