Skip to content

Commit a3f2f00

Browse files
committed
Improve: Pointer casting rules
1 parent 89be0cb commit a3f2f00

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

include/stringzilla/stringzilla.h

+34-21
Original file line numberDiff line numberDiff line change
@@ -2018,10 +2018,11 @@ SZ_INTERNAL sz_u64_vec_t _sz_u64_each_2byte_equal(sz_u64_vec_t a, sz_u64_vec_t b
20182018
* @brief Find the first occurrence of a @b two-character needle in an arbitrary length haystack.
20192019
* This implementation uses hardware-agnostic SWAR technique, to process 8 possible offsets at a time.
20202020
*/
2021-
SZ_INTERNAL sz_cptr_t _sz_find_2byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n) {
2021+
SZ_INTERNAL sz_cptr_t _sz_find_2byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
20222022

20232023
// This is an internal method, and the haystack is guaranteed to be at least 2 bytes long.
20242024
sz_assert(h_length >= 2 && "The haystack is too short.");
2025+
sz_unused(n_length);
20252026
sz_cptr_t const h_end = h + h_length;
20262027

20272028
#if !SZ_USE_MISALIGNED_LOADS
@@ -2072,10 +2073,11 @@ SZ_INTERNAL sz_u64_vec_t _sz_u64_each_4byte_equal(sz_u64_vec_t a, sz_u64_vec_t b
20722073
* @brief Find the first occurrence of a @b four-character needle in an arbitrary length haystack.
20732074
* This implementation uses hardware-agnostic SWAR technique, to process 8 possible offsets at a time.
20742075
*/
2075-
SZ_INTERNAL sz_cptr_t _sz_find_4byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n) {
2076+
SZ_INTERNAL sz_cptr_t _sz_find_4byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
20762077

20772078
// This is an internal method, and the haystack is guaranteed to be at least 4 bytes long.
20782079
sz_assert(h_length >= 4 && "The haystack is too short.");
2080+
sz_unused(n_length);
20792081
sz_cptr_t const h_end = h + h_length;
20802082

20812083
#if !SZ_USE_MISALIGNED_LOADS
@@ -2136,10 +2138,11 @@ SZ_INTERNAL sz_u64_vec_t _sz_u64_each_3byte_equal(sz_u64_vec_t a, sz_u64_vec_t b
21362138
* @brief Find the first occurrence of a @b three-character needle in an arbitrary length haystack.
21372139
* This implementation uses hardware-agnostic SWAR technique, to process 8 possible offsets at a time.
21382140
*/
2139-
SZ_INTERNAL sz_cptr_t _sz_find_3byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n) {
2141+
SZ_INTERNAL sz_cptr_t _sz_find_3byte_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
21402142

21412143
// This is an internal method, and the haystack is guaranteed to be at least 4 bytes long.
21422144
sz_assert(h_length >= 3 && "The haystack is too short.");
2145+
sz_unused(n_length);
21432146
sz_cptr_t const h_end = h + h_length;
21442147

21452148
#if !SZ_USE_MISALIGNED_LOADS
@@ -2344,8 +2347,18 @@ SZ_INTERNAL sz_cptr_t _sz_rfind_with_suffix(sz_cptr_t h, sz_size_t h_length, sz_
23442347
return SZ_NULL_CHAR;
23452348
}
23462349

2350+
SZ_INTERNAL sz_cptr_t _sz_find_byte_prefix_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
2351+
sz_unused(n_length);
2352+
return sz_find_byte_serial(h, h_length, n);
2353+
}
2354+
2355+
SZ_INTERNAL sz_cptr_t _sz_rfind_byte_prefix_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
2356+
sz_unused(n_length);
2357+
return sz_rfind_byte_serial(h, h_length, n);
2358+
}
2359+
23472360
SZ_INTERNAL sz_cptr_t _sz_find_over_4bytes_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n, sz_size_t n_length) {
2348-
return _sz_find_with_prefix(h, h_length, n, n_length, (sz_find_t)_sz_find_4byte_serial, 4);
2361+
return _sz_find_with_prefix(h, h_length, n, n_length, _sz_find_4byte_serial, 4);
23492362
}
23502363

23512364
SZ_INTERNAL sz_cptr_t _sz_find_horspool_over_256bytes_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n,
@@ -2364,24 +2377,24 @@ SZ_PUBLIC sz_cptr_t sz_find_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n,
23642377

23652378
#if SZ_DETECT_BIG_ENDIAN
23662379
sz_find_t backends[] = {
2367-
(sz_find_t)sz_find_byte_serial,
2368-
(sz_find_t)_sz_find_horspool_upto_256bytes_serial,
2369-
(sz_find_t)_sz_find_horspool_over_256bytes_serial,
2380+
_sz_find_byte_prefix_serial,
2381+
_sz_find_horspool_upto_256bytes_serial,
2382+
_sz_find_horspool_over_256bytes_serial,
23702383
};
23712384

23722385
return backends[(n_length > 1) + (n_length > 256)](h, h_length, n, n_length);
23732386
#else
23742387
sz_find_t backends[] = {
23752388
// For very short strings brute-force SWAR makes sense.
2376-
(sz_find_t)sz_find_byte_serial,
2377-
(sz_find_t)_sz_find_2byte_serial,
2378-
(sz_find_t)_sz_find_3byte_serial,
2379-
(sz_find_t)_sz_find_4byte_serial,
2389+
_sz_find_byte_prefix_serial,
2390+
_sz_find_2byte_serial,
2391+
_sz_find_3byte_serial,
2392+
_sz_find_4byte_serial,
23802393
// To avoid constructing the skip-table, let's use the prefixed approach.
2381-
(sz_find_t)_sz_find_over_4bytes_serial,
2394+
_sz_find_over_4bytes_serial,
23822395
// For longer needles - use skip tables.
2383-
(sz_find_t)_sz_find_horspool_upto_256bytes_serial,
2384-
(sz_find_t)_sz_find_horspool_over_256bytes_serial,
2396+
_sz_find_horspool_upto_256bytes_serial,
2397+
_sz_find_horspool_over_256bytes_serial,
23852398
};
23862399

23872400
return backends[
@@ -2401,16 +2414,16 @@ SZ_PUBLIC sz_cptr_t sz_rfind_serial(sz_cptr_t h, sz_size_t h_length, sz_cptr_t n
24012414

24022415
sz_find_t backends[] = {
24032416
// For very short strings brute-force SWAR makes sense.
2404-
(sz_find_t)sz_rfind_byte_serial,
2417+
_sz_rfind_byte_prefix_serial,
24052418
// TODO: implement reverse-order SWAR for 2/3/4 byte variants.
2406-
// TODO: (sz_find_t)_sz_rfind_2byte_serial,
2407-
// TODO: (sz_find_t)_sz_rfind_3byte_serial,
2408-
// TODO: (sz_find_t)_sz_rfind_4byte_serial,
2419+
// TODO: _sz_rfind_2byte_serial,
2420+
// TODO: _sz_rfind_3byte_serial,
2421+
// TODO: _sz_rfind_4byte_serial,
24092422
// To avoid constructing the skip-table, let's use the prefixed approach.
2410-
// (sz_find_t)_sz_rfind_over_4bytes_serial,
2423+
// _sz_rfind_over_4bytes_serial,
24112424
// For longer needles - use skip tables.
2412-
(sz_find_t)_sz_rfind_horspool_upto_256bytes_serial,
2413-
(sz_find_t)_sz_rfind_horspool_over_256bytes_serial,
2425+
_sz_rfind_horspool_upto_256bytes_serial,
2426+
_sz_rfind_horspool_over_256bytes_serial,
24142427
};
24152428

24162429
return backends[

0 commit comments

Comments
 (0)