- Notifications
You must be signed in to change notification settings - Fork 31.8k
/
Copy pathcount.h
32 lines (24 loc) · 941 Bytes
/
count.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* stringlib: count implementation */
#ifndefSTRINGLIB_FASTSEARCH_H
#error must include "stringlib/fastsearch.h" before including this module
#endif
// gh-97982: Implementing asciilib_count() is not worth it, FASTSEARCH() does
// not specialize the code for ASCII strings. Use ucs1lib_count() for ASCII and
// UCS1 strings: it's the same than asciilib_count().
#if !STRINGLIB_IS_UNICODE||STRINGLIB_MAX_CHAR>0x7Fu
Py_LOCAL_INLINE(Py_ssize_t)
STRINGLIB(count)(constSTRINGLIB_CHAR*str, Py_ssize_tstr_len,
constSTRINGLIB_CHAR*sub, Py_ssize_tsub_len,
Py_ssize_tmaxcount)
{
Py_ssize_tcount;
if (str_len<0)
return0; /* start > len(str) */
if (sub_len==0)
return (str_len<maxcount) ? str_len+1 : maxcount;
count=FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
if (count<0)
return0; /* no match */
returncount;
}
#endif