/src/cpython3/Objects/stringlib/count.h
Line | Count | Source |
1 | | /* stringlib: count implementation */ |
2 | | |
3 | | #ifndef STRINGLIB_FASTSEARCH_H |
4 | | #error must include "stringlib/fastsearch.h" before including this module |
5 | | #endif |
6 | | |
7 | | // gh-97982: Implementing asciilib_count() is not worth it, FASTSEARCH() does |
8 | | // not specialize the code for ASCII strings. Use ucs1lib_count() for ASCII and |
9 | | // UCS1 strings: it's the same than asciilib_count(). |
10 | | #if !STRINGLIB_IS_UNICODE || STRINGLIB_MAX_CHAR > 0x7Fu |
11 | | |
12 | | Py_LOCAL_INLINE(Py_ssize_t) |
13 | | STRINGLIB(count)(const STRINGLIB_CHAR* str, Py_ssize_t str_len, |
14 | | const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, |
15 | | Py_ssize_t maxcount) |
16 | 56.8k | { |
17 | 56.8k | Py_ssize_t count; |
18 | | |
19 | 56.8k | if (str_len < 0) |
20 | 0 | return 0; /* start > len(str) */ |
21 | 56.8k | if (sub_len == 0) |
22 | 0 | return (str_len < maxcount) ? str_len + 1 : maxcount; |
23 | | |
24 | 56.8k | count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT); |
25 | | |
26 | 56.8k | if (count < 0) |
27 | 246 | return 0; /* no match */ |
28 | | |
29 | 56.5k | return count; |
30 | 56.8k | } unicodeobject.c:ucs1lib_count Line | Count | Source | 16 | 42.7k | { | 17 | 42.7k | Py_ssize_t count; | 18 | | | 19 | 42.7k | if (str_len < 0) | 20 | 0 | return 0; /* start > len(str) */ | 21 | 42.7k | if (sub_len == 0) | 22 | 0 | return (str_len < maxcount) ? str_len + 1 : maxcount; | 23 | | | 24 | 42.7k | count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT); | 25 | | | 26 | 42.7k | if (count < 0) | 27 | 0 | return 0; /* no match */ | 28 | | | 29 | 42.7k | return count; | 30 | 42.7k | } |
unicodeobject.c:ucs2lib_count Line | Count | Source | 16 | 6.61k | { | 17 | 6.61k | Py_ssize_t count; | 18 | | | 19 | 6.61k | if (str_len < 0) | 20 | 0 | return 0; /* start > len(str) */ | 21 | 6.61k | if (sub_len == 0) | 22 | 0 | return (str_len < maxcount) ? str_len + 1 : maxcount; | 23 | | | 24 | 6.61k | count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT); | 25 | | | 26 | 6.61k | if (count < 0) | 27 | 0 | return 0; /* no match */ | 28 | | | 29 | 6.61k | return count; | 30 | 6.61k | } |
unicodeobject.c:ucs4lib_count Line | Count | Source | 16 | 5.07k | { | 17 | 5.07k | Py_ssize_t count; | 18 | | | 19 | 5.07k | if (str_len < 0) | 20 | 0 | return 0; /* start > len(str) */ | 21 | 5.07k | if (sub_len == 0) | 22 | 0 | return (str_len < maxcount) ? str_len + 1 : maxcount; | 23 | | | 24 | 5.07k | count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT); | 25 | | | 26 | 5.07k | if (count < 0) | 27 | 0 | return 0; /* no match */ | 28 | | | 29 | 5.07k | return count; | 30 | 5.07k | } |
bytes_methods.c:stringlib_count Line | Count | Source | 16 | 2.40k | { | 17 | 2.40k | Py_ssize_t count; | 18 | | | 19 | 2.40k | if (str_len < 0) | 20 | 0 | return 0; /* start > len(str) */ | 21 | 2.40k | if (sub_len == 0) | 22 | 0 | return (str_len < maxcount) ? str_len + 1 : maxcount; | 23 | | | 24 | 2.40k | count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT); | 25 | | | 26 | 2.40k | if (count < 0) | 27 | 246 | return 0; /* no match */ | 28 | | | 29 | 2.15k | return count; | 30 | 2.40k | } |
Unexecuted instantiation: bytearrayobject.c:stringlib_count Unexecuted instantiation: bytesobject.c:stringlib_count |
31 | | |
32 | | #endif |