Coverage Report

Created: 2024-05-13 06:32

/src/quickjs/list.h
Line
Count
Source
1
/*
2
 * Linux klist like system
3
 *
4
 * Copyright (c) 2016-2017 Fabrice Bellard
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24
#ifndef LIST_H
25
#define LIST_H
26
27
#ifndef NULL
28
#include <stddef.h>
29
#endif
30
31
struct list_head {
32
    struct list_head *prev;
33
    struct list_head *next;
34
};
35
36
#define LIST_HEAD_INIT(el) { &(el), &(el) }
37
38
/* return the pointer of type 'type *' containing 'el' as field 'member' */
39
84.2k
#define list_entry(el, type, member) container_of(el, type, member)
40
41
static inline void init_list_head(struct list_head *head)
42
872
{
43
872
    head->prev = head;
44
872
    head->next = head;
45
872
}
quickjs.c:init_list_head
Line
Count
Source
42
716
{
43
716
    head->prev = head;
44
716
    head->next = head;
45
716
}
quickjs-libc.c:init_list_head
Line
Count
Source
42
156
{
43
156
    head->prev = head;
44
156
    head->next = head;
45
156
}
46
47
/* insert 'el' between 'prev' and 'next' */
48
static inline void __list_add(struct list_head *el,
49
                              struct list_head *prev, struct list_head *next)
50
91.2k
{
51
91.2k
    prev->next = el;
52
91.2k
    el->prev = prev;
53
91.2k
    el->next = next;
54
91.2k
    next->prev = el;
55
91.2k
}
quickjs.c:__list_add
Line
Count
Source
50
91.2k
{
51
91.2k
    prev->next = el;
52
91.2k
    el->prev = prev;
53
91.2k
    el->next = next;
54
91.2k
    next->prev = el;
55
91.2k
}
Unexecuted instantiation: quickjs-libc.c:__list_add
56
57
/* add 'el' at the head of the list 'head' (= after element head) */
58
static inline void list_add(struct list_head *el, struct list_head *head)
59
360
{
60
360
    __list_add(el, head, head->next);
61
360
}
quickjs.c:list_add
Line
Count
Source
59
360
{
60
360
    __list_add(el, head, head->next);
61
360
}
Unexecuted instantiation: quickjs-libc.c:list_add
62
63
/* add 'el' at the end of the list 'head' (= before element head) */
64
static inline void list_add_tail(struct list_head *el, struct list_head *head)
65
90.8k
{
66
90.8k
    __list_add(el, head->prev, head);
67
90.8k
}
quickjs.c:list_add_tail
Line
Count
Source
65
90.8k
{
66
90.8k
    __list_add(el, head->prev, head);
67
90.8k
}
Unexecuted instantiation: quickjs-libc.c:list_add_tail
68
69
static inline void list_del(struct list_head *el)
70
85.2k
{
71
85.2k
    struct list_head *prev, *next;
72
85.2k
    prev = el->prev;
73
85.2k
    next = el->next;
74
85.2k
    prev->next = next;
75
85.2k
    next->prev = prev;
76
85.2k
    el->prev = NULL; /* fail safe */
77
85.2k
    el->next = NULL; /* fail safe */
78
85.2k
}
quickjs.c:list_del
Line
Count
Source
70
85.2k
{
71
85.2k
    struct list_head *prev, *next;
72
85.2k
    prev = el->prev;
73
85.2k
    next = el->next;
74
85.2k
    prev->next = next;
75
85.2k
    next->prev = prev;
76
85.2k
    el->prev = NULL; /* fail safe */
77
85.2k
    el->next = NULL; /* fail safe */
78
85.2k
}
Unexecuted instantiation: quickjs-libc.c:list_del
79
80
static inline int list_empty(struct list_head *el)
81
162
{
82
162
    return el->next == el;
83
162
}
quickjs.c:list_empty
Line
Count
Source
81
117
{
82
117
    return el->next == el;
83
117
}
quickjs-libc.c:list_empty
Line
Count
Source
81
45
{
82
45
    return el->next == el;
83
45
}
84
85
#define list_for_each(el, head) \
86
32.4k
  for(el = (head)->next; el != (head); el = el->next)
87
88
#define list_for_each_safe(el, el1, head)                \
89
38.1k
    for(el = (head)->next, el1 = el->next; el != (head); \
90
37.3k
        el = el1, el1 = el->next)
91
92
#define list_for_each_prev(el, head) \
93
  for(el = (head)->prev; el != (head); el = el->prev)
94
95
#define list_for_each_prev_safe(el, el1, head)           \
96
    for(el = (head)->prev, el1 = el->prev; el != (head); \
97
        el = el1, el1 = el->prev)
98
99
#endif /* LIST_H */