Coverage Report

Created: 2025-12-14 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Objects/stringlib/find.h
Line
Count
Source
1
/* stringlib: find/index implementation */
2
3
#ifndef STRINGLIB_FASTSEARCH_H
4
#error must include "stringlib/fastsearch.h" before including this module
5
#endif
6
7
Py_LOCAL_INLINE(Py_ssize_t)
8
STRINGLIB(find)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
9
               const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
10
               Py_ssize_t offset)
11
156M
{
12
156M
    Py_ssize_t pos;
13
14
156M
    assert(str_len >= 0);
15
156M
    if (sub_len == 0)
16
0
        return offset;
17
18
156M
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
156M
    if (pos >= 0)
21
146M
        pos += offset;
22
23
156M
    return pos;
24
156M
}
Unexecuted instantiation: bytesobject.c:stringlib_find
unicodeobject.c:asciilib_find
Line
Count
Source
11
21.1M
{
12
21.1M
    Py_ssize_t pos;
13
14
21.1M
    assert(str_len >= 0);
15
21.1M
    if (sub_len == 0)
16
0
        return offset;
17
18
21.1M
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
21.1M
    if (pos >= 0)
21
21.1M
        pos += offset;
22
23
21.1M
    return pos;
24
21.1M
}
unicodeobject.c:ucs1lib_find
Line
Count
Source
11
15.1M
{
12
15.1M
    Py_ssize_t pos;
13
14
15.1M
    assert(str_len >= 0);
15
15.1M
    if (sub_len == 0)
16
0
        return offset;
17
18
15.1M
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
15.1M
    if (pos >= 0)
21
4.48M
        pos += offset;
22
23
15.1M
    return pos;
24
15.1M
}
unicodeobject.c:ucs2lib_find
Line
Count
Source
11
64.4M
{
12
64.4M
    Py_ssize_t pos;
13
14
64.4M
    assert(str_len >= 0);
15
64.4M
    if (sub_len == 0)
16
0
        return offset;
17
18
64.4M
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
64.4M
    if (pos >= 0)
21
64.4M
        pos += offset;
22
23
64.4M
    return pos;
24
64.4M
}
unicodeobject.c:ucs4lib_find
Line
Count
Source
11
56.0M
{
12
56.0M
    Py_ssize_t pos;
13
14
56.0M
    assert(str_len >= 0);
15
56.0M
    if (sub_len == 0)
16
0
        return offset;
17
18
56.0M
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
56.0M
    if (pos >= 0)
21
55.9M
        pos += offset;
22
23
56.0M
    return pos;
24
56.0M
}
bytes_methods.c:stringlib_find
Line
Count
Source
11
2.80k
{
12
2.80k
    Py_ssize_t pos;
13
14
2.80k
    assert(str_len >= 0);
15
2.80k
    if (sub_len == 0)
16
0
        return offset;
17
18
2.80k
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
19
20
2.80k
    if (pos >= 0)
21
2.57k
        pos += offset;
22
23
2.80k
    return pos;
24
2.80k
}
Unexecuted instantiation: bytearrayobject.c:stringlib_find
25
26
Py_LOCAL_INLINE(Py_ssize_t)
27
STRINGLIB(rfind)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
28
                const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
29
                Py_ssize_t offset)
30
6.41k
{
31
6.41k
    Py_ssize_t pos;
32
33
6.41k
    assert(str_len >= 0);
34
6.41k
    if (sub_len == 0)
35
0
        return str_len + offset;
36
37
6.41k
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_RSEARCH);
38
39
6.41k
    if (pos >= 0)
40
6.31k
        pos += offset;
41
42
6.41k
    return pos;
43
6.41k
}
Unexecuted instantiation: bytesobject.c:stringlib_rfind
Unexecuted instantiation: unicodeobject.c:asciilib_rfind
Unexecuted instantiation: unicodeobject.c:ucs1lib_rfind
Unexecuted instantiation: unicodeobject.c:ucs2lib_rfind
Unexecuted instantiation: unicodeobject.c:ucs4lib_rfind
bytes_methods.c:stringlib_rfind
Line
Count
Source
30
6.41k
{
31
6.41k
    Py_ssize_t pos;
32
33
6.41k
    assert(str_len >= 0);
34
6.41k
    if (sub_len == 0)
35
0
        return str_len + offset;
36
37
6.41k
    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_RSEARCH);
38
39
6.41k
    if (pos >= 0)
40
6.31k
        pos += offset;
41
42
6.41k
    return pos;
43
6.41k
}
Unexecuted instantiation: bytearrayobject.c:stringlib_rfind
44
45
Py_LOCAL_INLINE(Py_ssize_t)
46
STRINGLIB(find_slice)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
47
                     const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
48
                     Py_ssize_t start, Py_ssize_t end)
49
82.7k
{
50
82.7k
    return STRINGLIB(find)(str + start, end - start, sub, sub_len, start);
51
82.7k
}
Unexecuted instantiation: bytesobject.c:stringlib_find_slice
unicodeobject.c:asciilib_find_slice
Line
Count
Source
49
24.4k
{
50
24.4k
    return STRINGLIB(find)(str + start, end - start, sub, sub_len, start);
51
24.4k
}
unicodeobject.c:ucs1lib_find_slice
Line
Count
Source
49
14.5k
{
50
14.5k
    return STRINGLIB(find)(str + start, end - start, sub, sub_len, start);
51
14.5k
}
unicodeobject.c:ucs2lib_find_slice
Line
Count
Source
49
31.5k
{
50
31.5k
    return STRINGLIB(find)(str + start, end - start, sub, sub_len, start);
51
31.5k
}
unicodeobject.c:ucs4lib_find_slice
Line
Count
Source
49
12.1k
{
50
12.1k
    return STRINGLIB(find)(str + start, end - start, sub, sub_len, start);
51
12.1k
}
Unexecuted instantiation: bytes_methods.c:stringlib_find_slice
Unexecuted instantiation: bytearrayobject.c:stringlib_find_slice
52
53
Py_LOCAL_INLINE(Py_ssize_t)
54
STRINGLIB(rfind_slice)(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
55
                      const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
56
                      Py_ssize_t start, Py_ssize_t end)
57
6.41k
{
58
6.41k
    return STRINGLIB(rfind)(str + start, end - start, sub, sub_len, start);
59
6.41k
}
Unexecuted instantiation: bytesobject.c:stringlib_rfind_slice
Unexecuted instantiation: unicodeobject.c:asciilib_rfind_slice
Unexecuted instantiation: unicodeobject.c:ucs1lib_rfind_slice
Unexecuted instantiation: unicodeobject.c:ucs2lib_rfind_slice
Unexecuted instantiation: unicodeobject.c:ucs4lib_rfind_slice
bytes_methods.c:stringlib_rfind_slice
Line
Count
Source
57
6.41k
{
58
6.41k
    return STRINGLIB(rfind)(str + start, end - start, sub, sub_len, start);
59
6.41k
}
Unexecuted instantiation: bytearrayobject.c:stringlib_rfind_slice
60
61
#ifdef STRINGLIB_WANT_CONTAINS_OBJ
62
63
Py_LOCAL_INLINE(int)
64
STRINGLIB(contains_obj)(PyObject* str, PyObject* sub)
65
{
66
    return STRINGLIB(find)(
67
        STRINGLIB_STR(str), STRINGLIB_LEN(str),
68
        STRINGLIB_STR(sub), STRINGLIB_LEN(sub), 0
69
        ) != -1;
70
}
71
72
#endif /* STRINGLIB_WANT_CONTAINS_OBJ */