Coverage Report

Created: 2025-10-12 06:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/pjsip/pjlib/include/pj/list.h
Line
Count
Source
1
/* 
2
 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
3
 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
 */
19
#ifndef __PJ_LIST_H__
20
#define __PJ_LIST_H__
21
22
/**
23
 * @file list.h
24
 * @brief Linked List data structure.
25
 */
26
27
#include <pj/types.h>
28
29
PJ_BEGIN_DECL
30
31
/*
32
 * @defgroup PJ_DS Data Structure.
33
 */
34
35
/**
36
 * @defgroup PJ_LIST Linked List
37
 * @ingroup PJ_DS
38
 * @{
39
 *
40
 * List in PJLIB is implemented as doubly-linked list, and it won't require
41
 * dynamic memory allocation (just as all PJLIB data structures). The list here
42
 * should be viewed more like a low level C list instead of high level C++ list
43
 * (which normally are easier to use but require dynamic memory allocations),
44
 * therefore all caveats with C list apply here too (such as you can NOT put
45
 * a node in more than one lists).
46
 *
47
 * \section pj_list_example_sec Examples
48
 *
49
 * See below for examples on how to manipulate linked list:
50
 *  - List sample: \src{pjlib/src/pjlib-samples/list.c}
51
 *  - List test: \src{pjlib/src/pjlib-test/list.c}
52
 */
53
54
55
/**
56
 * Use this macro in the start of the structure declaration to declare that
57
 * the structure can be used in the linked list operation. This macro simply
58
 * declares additional member @a prev and @a next to the structure.
59
 * @hideinitializer
60
 */
61
#define PJ_DECL_LIST_MEMBER(type)                       \
62
                                   /** List @a prev. */ \
63
                                   type *prev;          \
64
                                   /** List @a next. */ \
65
                                   type *next 
66
67
68
/**
69
 * This structure describes generic list node and list. The owner of this list
70
 * must initialize the 'value' member to an appropriate value (typically the
71
 * owner itself).
72
 */
73
struct pj_list
74
{
75
    PJ_DECL_LIST_MEMBER(void);
76
} PJ_ATTR_MAY_ALIAS; /* may_alias avoids warning with gcc-4.4 -Wall -O2 */
77
78
79
/**
80
 * Initialize the list.
81
 * Initially, the list will have no member, and function pj_list_empty() will
82
 * always return nonzero (which indicates TRUE) for the newly initialized 
83
 * list.
84
 *
85
 * @param node The list head.
86
 */
87
PJ_INLINE(void) pj_list_init(pj_list_type * node)
88
1.02M
{
89
1.02M
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
1.02M
}
Unexecuted instantiation: fuzz-json.c:pj_list_init
json.c:pj_list_init
Line
Count
Source
88
104k
{
89
104k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
104k
}
Unexecuted instantiation: os_core_unix.c:pj_list_init
Unexecuted instantiation: pool_policy_malloc.c:pj_list_init
list.c:pj_list_init
Line
Count
Source
88
205k
{
89
205k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
205k
}
pool.c:pj_list_init
Line
Count
Source
88
58.2k
{
89
58.2k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
58.2k
}
pool_caching.c:pj_list_init
Line
Count
Source
88
241k
{
89
241k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
241k
}
Unexecuted instantiation: string.c:pj_list_init
ioqueue_select.c:pj_list_init
Line
Count
Source
88
15.0k
{
89
15.0k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
15.0k
}
lock.c:pj_list_init
Line
Count
Source
88
10.0k
{
89
10.0k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
10.0k
}
Unexecuted instantiation: pool_buf.c:pj_list_init
Unexecuted instantiation: fuzz-url.c:pj_list_init
Unexecuted instantiation: http_client.c:pj_list_init
Unexecuted instantiation: activesock.c:pj_list_init
Unexecuted instantiation: sock_common.c:pj_list_init
Unexecuted instantiation: timer.c:pj_list_init
Unexecuted instantiation: fuzz-sdp.c:pj_list_init
event.c:pj_list_init
Line
Count
Source
88
5.75k
{
89
5.75k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
5.75k
}
Unexecuted instantiation: sdp.c:pj_list_init
Unexecuted instantiation: fuzz-uri.c:pj_list_init
Unexecuted instantiation: sip_parser.c:pj_list_init
sip_uri.c:pj_list_init
Line
Count
Source
88
13.2k
{
89
13.2k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
13.2k
}
sip_auth_parser.c:pj_list_init
Line
Count
Source
88
627
{
89
627
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
627
}
sip_multipart.c:pj_list_init
Line
Count
Source
88
8.51k
{
89
8.51k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
8.51k
}
sip_msg.c:pj_list_init
Line
Count
Source
88
105k
{
89
105k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
105k
}
sip_auth_msg.c:pj_list_init
Line
Count
Source
88
2.76k
{
89
2.76k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
2.76k
}
Unexecuted instantiation: guid.c:pj_list_init
Unexecuted instantiation: hash.c:pj_list_init
fuzz-sip.c:pj_list_init
Line
Count
Source
88
5.00k
{
89
5.00k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
5.00k
}
sip_endpoint.c:pj_list_init
Line
Count
Source
88
20.0k
{
89
20.0k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
20.0k
}
Unexecuted instantiation: sip_resolve.c:pj_list_init
sip_transport.c:pj_list_init
Line
Count
Source
88
95.0k
{
89
95.0k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
95.0k
}
sip_transport_loop.c:pj_list_init
Line
Count
Source
88
20.0k
{
89
20.0k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
20.0k
}
Unexecuted instantiation: sip_transaction.c:pj_list_init
Unexecuted instantiation: sip_util_statefull.c:pj_list_init
Unexecuted instantiation: sip_errno.c:pj_list_init
sip_tel_uri.c:pj_list_init
Line
Count
Source
88
1.12k
{
89
1.12k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
1.12k
}
Unexecuted instantiation: sip_util.c:pj_list_init
Unexecuted instantiation: dns.c:pj_list_init
Unexecuted instantiation: resolver.c:pj_list_init
Unexecuted instantiation: srv_resolver.c:pj_list_init
Unexecuted instantiation: fuzz-dns.c:pj_list_init
Unexecuted instantiation: fuzz-crypto.c:pj_list_init
Unexecuted instantiation: fuzz-xml.c:pj_list_init
xml.c:pj_list_init
Line
Count
Source
88
113k
{
89
113k
    ((pj_list*)node)->next = ((pj_list*)node)->prev = node;
90
113k
}
Unexecuted instantiation: fuzz-stun.c:pj_list_init
Unexecuted instantiation: stun_auth.c:pj_list_init
Unexecuted instantiation: stun_msg.c:pj_list_init
Unexecuted instantiation: fuzz-rtcp.c:pj_list_init
Unexecuted instantiation: rtcp.c:pj_list_init
Unexecuted instantiation: rtcp_fb.c:pj_list_init
Unexecuted instantiation: vid_codec.c:pj_list_init
Unexecuted instantiation: codec.c:pj_list_init
Unexecuted instantiation: endpoint.c:pj_list_init
Unexecuted instantiation: format.c:pj_list_init
Unexecuted instantiation: fuzz-vpx.c:pj_list_init
Unexecuted instantiation: vpx_packetizer.c:pj_list_init
Unexecuted instantiation: fuzz-h264.c:pj_list_init
Unexecuted instantiation: h264_packetizer.c:pj_list_init
Unexecuted instantiation: fuzz-http.c:pj_list_init
91
92
93
/**
94
 * Check that the list is empty.
95
 *
96
 * @param node  The list head.
97
 *
98
 * @return Non-zero if the list is empty, or zero if it is not empty.
99
 *
100
 */
101
PJ_INLINE(int) pj_list_empty(const pj_list_type * node)
102
71.0k
{
103
71.0k
    return ((pj_list*)node)->next == node;
104
71.0k
}
Unexecuted instantiation: fuzz-json.c:pj_list_empty
json.c:pj_list_empty
Line
Count
Source
102
4.00k
{
103
4.00k
    return ((pj_list*)node)->next == node;
104
4.00k
}
Unexecuted instantiation: os_core_unix.c:pj_list_empty
Unexecuted instantiation: pool_policy_malloc.c:pj_list_empty
Unexecuted instantiation: list.c:pj_list_empty
Unexecuted instantiation: pool.c:pj_list_empty
pool_caching.c:pj_list_empty
Line
Count
Source
102
44.0k
{
103
44.0k
    return ((pj_list*)node)->next == node;
104
44.0k
}
Unexecuted instantiation: string.c:pj_list_empty
Unexecuted instantiation: ioqueue_select.c:pj_list_empty
Unexecuted instantiation: lock.c:pj_list_empty
Unexecuted instantiation: pool_buf.c:pj_list_empty
Unexecuted instantiation: fuzz-url.c:pj_list_empty
Unexecuted instantiation: http_client.c:pj_list_empty
Unexecuted instantiation: activesock.c:pj_list_empty
Unexecuted instantiation: sock_common.c:pj_list_empty
Unexecuted instantiation: timer.c:pj_list_empty
Unexecuted instantiation: fuzz-sdp.c:pj_list_empty
Unexecuted instantiation: event.c:pj_list_empty
Unexecuted instantiation: sdp.c:pj_list_empty
Unexecuted instantiation: fuzz-uri.c:pj_list_empty
Unexecuted instantiation: sip_parser.c:pj_list_empty
Unexecuted instantiation: sip_uri.c:pj_list_empty
Unexecuted instantiation: sip_auth_parser.c:pj_list_empty
Unexecuted instantiation: sip_multipart.c:pj_list_empty
Unexecuted instantiation: sip_msg.c:pj_list_empty
Unexecuted instantiation: sip_auth_msg.c:pj_list_empty
Unexecuted instantiation: guid.c:pj_list_empty
Unexecuted instantiation: hash.c:pj_list_empty
Unexecuted instantiation: fuzz-sip.c:pj_list_empty
Unexecuted instantiation: sip_endpoint.c:pj_list_empty
Unexecuted instantiation: sip_resolve.c:pj_list_empty
sip_transport.c:pj_list_empty
Line
Count
Source
102
10.0k
{
103
10.0k
    return ((pj_list*)node)->next == node;
104
10.0k
}
sip_transport_loop.c:pj_list_empty
Line
Count
Source
102
13.0k
{
103
13.0k
    return ((pj_list*)node)->next == node;
104
13.0k
}
Unexecuted instantiation: sip_transaction.c:pj_list_empty
Unexecuted instantiation: sip_util_statefull.c:pj_list_empty
Unexecuted instantiation: sip_errno.c:pj_list_empty
Unexecuted instantiation: sip_tel_uri.c:pj_list_empty
Unexecuted instantiation: sip_util.c:pj_list_empty
Unexecuted instantiation: dns.c:pj_list_empty
Unexecuted instantiation: resolver.c:pj_list_empty
Unexecuted instantiation: srv_resolver.c:pj_list_empty
Unexecuted instantiation: fuzz-dns.c:pj_list_empty
Unexecuted instantiation: fuzz-crypto.c:pj_list_empty
Unexecuted instantiation: fuzz-xml.c:pj_list_empty
Unexecuted instantiation: xml.c:pj_list_empty
Unexecuted instantiation: fuzz-stun.c:pj_list_empty
Unexecuted instantiation: stun_auth.c:pj_list_empty
Unexecuted instantiation: stun_msg.c:pj_list_empty
Unexecuted instantiation: fuzz-rtcp.c:pj_list_empty
Unexecuted instantiation: rtcp.c:pj_list_empty
Unexecuted instantiation: rtcp_fb.c:pj_list_empty
Unexecuted instantiation: vid_codec.c:pj_list_empty
Unexecuted instantiation: codec.c:pj_list_empty
Unexecuted instantiation: endpoint.c:pj_list_empty
Unexecuted instantiation: format.c:pj_list_empty
Unexecuted instantiation: fuzz-vpx.c:pj_list_empty
Unexecuted instantiation: vpx_packetizer.c:pj_list_empty
Unexecuted instantiation: fuzz-h264.c:pj_list_empty
Unexecuted instantiation: h264_packetizer.c:pj_list_empty
Unexecuted instantiation: fuzz-http.c:pj_list_empty
105
106
107
/**
108
 * Insert the node to the list before the specified element position.
109
 *
110
 * @param pos   The element to which the node will be inserted before. 
111
 * @param node  The element to be inserted.
112
 *
113
 */
114
PJ_IDECL(void)  pj_list_insert_before(pj_list_type *pos, pj_list_type *node);
115
116
117
/**
118
 * Insert the node to the back of the list. This is just an alias for
119
 * #pj_list_insert_before().
120
 *
121
 * @param list  The list. 
122
 * @param node  The element to be inserted.
123
 */
124
PJ_INLINE(void) pj_list_push_back(pj_list_type *list, pj_list_type *node)
125
456k
{
126
456k
    pj_list_insert_before(list, node);
127
456k
}
Unexecuted instantiation: fuzz-json.c:pj_list_push_back
json.c:pj_list_push_back
Line
Count
Source
125
14.6k
{
126
14.6k
    pj_list_insert_before(list, node);
127
14.6k
}
Unexecuted instantiation: os_core_unix.c:pj_list_push_back
Unexecuted instantiation: pool_policy_malloc.c:pj_list_push_back
Unexecuted instantiation: list.c:pj_list_push_back
Unexecuted instantiation: pool.c:pj_list_push_back
Unexecuted instantiation: pool_caching.c:pj_list_push_back
Unexecuted instantiation: string.c:pj_list_push_back
ioqueue_select.c:pj_list_push_back
Line
Count
Source
125
320k
{
126
320k
    pj_list_insert_before(list, node);
127
320k
}
lock.c:pj_list_push_back
Line
Count
Source
125
5.00k
{
126
5.00k
    pj_list_insert_before(list, node);
127
5.00k
}
Unexecuted instantiation: pool_buf.c:pj_list_push_back
Unexecuted instantiation: fuzz-url.c:pj_list_push_back
Unexecuted instantiation: http_client.c:pj_list_push_back
Unexecuted instantiation: activesock.c:pj_list_push_back
Unexecuted instantiation: sock_common.c:pj_list_push_back
Unexecuted instantiation: timer.c:pj_list_push_back
Unexecuted instantiation: fuzz-sdp.c:pj_list_push_back
Unexecuted instantiation: event.c:pj_list_push_back
Unexecuted instantiation: sdp.c:pj_list_push_back
Unexecuted instantiation: fuzz-uri.c:pj_list_push_back
sip_parser.c:pj_list_push_back
Line
Count
Source
125
5.62k
{
126
5.62k
    pj_list_insert_before(list, node);
127
5.62k
}
Unexecuted instantiation: sip_uri.c:pj_list_push_back
Unexecuted instantiation: sip_auth_parser.c:pj_list_push_back
sip_multipart.c:pj_list_push_back
Line
Count
Source
125
8.51k
{
126
8.51k
    pj_list_insert_before(list, node);
127
8.51k
}
Unexecuted instantiation: sip_msg.c:pj_list_push_back
Unexecuted instantiation: sip_auth_msg.c:pj_list_push_back
Unexecuted instantiation: guid.c:pj_list_push_back
Unexecuted instantiation: hash.c:pj_list_push_back
Unexecuted instantiation: fuzz-sip.c:pj_list_push_back
Unexecuted instantiation: sip_endpoint.c:pj_list_push_back
Unexecuted instantiation: sip_resolve.c:pj_list_push_back
sip_transport.c:pj_list_push_back
Line
Count
Source
125
85.0k
{
126
85.0k
    pj_list_insert_before(list, node);
127
85.0k
}
Unexecuted instantiation: sip_transport_loop.c:pj_list_push_back
Unexecuted instantiation: sip_transaction.c:pj_list_push_back
Unexecuted instantiation: sip_util_statefull.c:pj_list_push_back
Unexecuted instantiation: sip_errno.c:pj_list_push_back
Unexecuted instantiation: sip_tel_uri.c:pj_list_push_back
Unexecuted instantiation: sip_util.c:pj_list_push_back
Unexecuted instantiation: dns.c:pj_list_push_back
Unexecuted instantiation: resolver.c:pj_list_push_back
Unexecuted instantiation: srv_resolver.c:pj_list_push_back
Unexecuted instantiation: fuzz-dns.c:pj_list_push_back
Unexecuted instantiation: fuzz-crypto.c:pj_list_push_back
Unexecuted instantiation: fuzz-xml.c:pj_list_push_back
xml.c:pj_list_push_back
Line
Count
Source
125
17.3k
{
126
17.3k
    pj_list_insert_before(list, node);
127
17.3k
}
Unexecuted instantiation: fuzz-stun.c:pj_list_push_back
Unexecuted instantiation: stun_auth.c:pj_list_push_back
Unexecuted instantiation: stun_msg.c:pj_list_push_back
Unexecuted instantiation: fuzz-rtcp.c:pj_list_push_back
Unexecuted instantiation: rtcp.c:pj_list_push_back
Unexecuted instantiation: rtcp_fb.c:pj_list_push_back
Unexecuted instantiation: vid_codec.c:pj_list_push_back
Unexecuted instantiation: codec.c:pj_list_push_back
Unexecuted instantiation: endpoint.c:pj_list_push_back
Unexecuted instantiation: format.c:pj_list_push_back
Unexecuted instantiation: fuzz-vpx.c:pj_list_push_back
Unexecuted instantiation: vpx_packetizer.c:pj_list_push_back
Unexecuted instantiation: fuzz-h264.c:pj_list_push_back
Unexecuted instantiation: h264_packetizer.c:pj_list_push_back
Unexecuted instantiation: fuzz-http.c:pj_list_push_back
128
129
130
/**
131
 * Inserts all nodes in \a nodes to the target list.
132
 *
133
 * @param lst       The target list.
134
 * @param nodes     Nodes list.
135
 */
136
PJ_IDECL(void) pj_list_insert_nodes_before(pj_list_type *lst,
137
                                           pj_list_type *nodes);
138
139
/**
140
 * Insert a node to the list after the specified element position.
141
 *
142
 * @param pos       The element in the list which will precede the inserted 
143
 *                  element.
144
 * @param node      The element to be inserted after the position element.
145
 *
146
 */
147
PJ_IDECL(void) pj_list_insert_after(pj_list_type *pos, pj_list_type *node);
148
149
150
/**
151
 * Insert the node to the front of the list. This is just an alias for
152
 * #pj_list_insert_after().
153
 *
154
 * @param list  The list. 
155
 * @param node  The element to be inserted.
156
 */
157
PJ_INLINE(void) pj_list_push_front(pj_list_type *list, pj_list_type *node)
158
0
{
159
0
    pj_list_insert_after(list, node);
160
0
}
Unexecuted instantiation: fuzz-json.c:pj_list_push_front
Unexecuted instantiation: json.c:pj_list_push_front
Unexecuted instantiation: os_core_unix.c:pj_list_push_front
Unexecuted instantiation: pool_policy_malloc.c:pj_list_push_front
Unexecuted instantiation: list.c:pj_list_push_front
Unexecuted instantiation: pool.c:pj_list_push_front
Unexecuted instantiation: pool_caching.c:pj_list_push_front
Unexecuted instantiation: string.c:pj_list_push_front
Unexecuted instantiation: ioqueue_select.c:pj_list_push_front
Unexecuted instantiation: lock.c:pj_list_push_front
Unexecuted instantiation: pool_buf.c:pj_list_push_front
Unexecuted instantiation: fuzz-url.c:pj_list_push_front
Unexecuted instantiation: http_client.c:pj_list_push_front
Unexecuted instantiation: activesock.c:pj_list_push_front
Unexecuted instantiation: sock_common.c:pj_list_push_front
Unexecuted instantiation: timer.c:pj_list_push_front
Unexecuted instantiation: fuzz-sdp.c:pj_list_push_front
Unexecuted instantiation: event.c:pj_list_push_front
Unexecuted instantiation: sdp.c:pj_list_push_front
Unexecuted instantiation: fuzz-uri.c:pj_list_push_front
Unexecuted instantiation: sip_parser.c:pj_list_push_front
Unexecuted instantiation: sip_uri.c:pj_list_push_front
Unexecuted instantiation: sip_auth_parser.c:pj_list_push_front
Unexecuted instantiation: sip_multipart.c:pj_list_push_front
Unexecuted instantiation: sip_msg.c:pj_list_push_front
Unexecuted instantiation: sip_auth_msg.c:pj_list_push_front
Unexecuted instantiation: guid.c:pj_list_push_front
Unexecuted instantiation: hash.c:pj_list_push_front
Unexecuted instantiation: fuzz-sip.c:pj_list_push_front
Unexecuted instantiation: sip_endpoint.c:pj_list_push_front
Unexecuted instantiation: sip_resolve.c:pj_list_push_front
Unexecuted instantiation: sip_transport.c:pj_list_push_front
Unexecuted instantiation: sip_transport_loop.c:pj_list_push_front
Unexecuted instantiation: sip_transaction.c:pj_list_push_front
Unexecuted instantiation: sip_util_statefull.c:pj_list_push_front
Unexecuted instantiation: sip_errno.c:pj_list_push_front
Unexecuted instantiation: sip_tel_uri.c:pj_list_push_front
Unexecuted instantiation: sip_util.c:pj_list_push_front
Unexecuted instantiation: dns.c:pj_list_push_front
Unexecuted instantiation: resolver.c:pj_list_push_front
Unexecuted instantiation: srv_resolver.c:pj_list_push_front
Unexecuted instantiation: fuzz-dns.c:pj_list_push_front
Unexecuted instantiation: fuzz-crypto.c:pj_list_push_front
Unexecuted instantiation: fuzz-xml.c:pj_list_push_front
Unexecuted instantiation: xml.c:pj_list_push_front
Unexecuted instantiation: fuzz-stun.c:pj_list_push_front
Unexecuted instantiation: stun_auth.c:pj_list_push_front
Unexecuted instantiation: stun_msg.c:pj_list_push_front
Unexecuted instantiation: fuzz-rtcp.c:pj_list_push_front
Unexecuted instantiation: rtcp.c:pj_list_push_front
Unexecuted instantiation: rtcp_fb.c:pj_list_push_front
Unexecuted instantiation: vid_codec.c:pj_list_push_front
Unexecuted instantiation: codec.c:pj_list_push_front
Unexecuted instantiation: endpoint.c:pj_list_push_front
Unexecuted instantiation: format.c:pj_list_push_front
Unexecuted instantiation: fuzz-vpx.c:pj_list_push_front
Unexecuted instantiation: vpx_packetizer.c:pj_list_push_front
Unexecuted instantiation: fuzz-h264.c:pj_list_push_front
Unexecuted instantiation: h264_packetizer.c:pj_list_push_front
Unexecuted instantiation: fuzz-http.c:pj_list_push_front
161
162
163
/**
164
 * Insert all nodes in \a nodes to the target list.
165
 *
166
 * @param lst       The target list.
167
 * @param nodes     Nodes list.
168
 */
169
PJ_IDECL(void) pj_list_insert_nodes_after(pj_list_type *lst,
170
                                          pj_list_type *nodes);
171
172
173
/**
174
 * Insert a list to another list before the specified element position.
175
 *
176
 * @param pos   The element to which the node will be inserted before.
177
 * @param lst   The list to be inserted.
178
 */
179
PJ_IDECL(void) pj_list_insert_list_before(pj_list_type *pos,
180
                                          pj_list_type *lst);
181
182
183
/**
184
 * Insert a list to another list after the specified element position.
185
 *
186
 * @param pos   The element in the list which will precede the inserted
187
 *              list.
188
 * @param lst   The list to be inserted.
189
 */
190
PJ_IDECL(void) pj_list_insert_list_after(pj_list_type *pos,
191
                                         pj_list_type *lst);
192
193
194
/**
195
 * Remove elements from the source list, and insert them to the destination
196
 * list. The elements of the source list will occupy the
197
 * front elements of the target list. Note that the node pointed by \a list2
198
 * itself is not considered as a node, but rather as the list descriptor, so
199
 * it will not be inserted to the \a list1. The elements to be inserted starts
200
 * at \a list2->next. If \a list2 is to be included in the operation, use
201
 * \a pj_list_insert_nodes_before.
202
 *
203
 * @param list1 The destination list.
204
 * @param list2 The source list.
205
 *
206
 */
207
PJ_IDECL(void) pj_list_merge_first(pj_list_type *list1, pj_list_type *list2);
208
209
210
/**
211
 * Remove elements from the second list argument, and insert them to the list 
212
 * in the first argument. The elements from the second list will be appended
213
 * to the first list. Note that the node pointed by \a list2
214
 * itself is not considered as a node, but rather as the list descriptor, so
215
 * it will not be inserted to the \a list1. The elements to be inserted starts
216
 * at \a list2->next. If \a list2 is to be included in the operation, use
217
 * \a pj_list_insert_nodes_before.
218
 *
219
 * @param list1     The element in the list which will precede the inserted 
220
 *                  element.
221
 * @param list2     The element in the list to be inserted.
222
 *
223
 */
224
PJ_IDECL(void) pj_list_merge_last( pj_list_type *list1, pj_list_type *list2);
225
226
227
/**
228
 * Erase the node from the list it currently belongs.
229
 *
230
 * @param node      The element to be erased.
231
 */
232
PJ_IDECL(void) pj_list_erase(pj_list_type *node);
233
234
235
/**
236
 * Find node in the list.
237
 *
238
 * @param list      The list head.
239
 * @param node      The node element to be searched.
240
 *
241
 * @return The node itself if it is found in the list, or NULL if it is not 
242
 *         found in the list.
243
 */
244
PJ_IDECL(pj_list_type*) pj_list_find_node(pj_list_type *list, 
245
                                          pj_list_type *node);
246
247
248
/**
249
 * Search the list for the specified value, using the specified comparison
250
 * function. This function iterates on nodes in the list, started with the
251
 * first node, and call the user supplied comparison function until the
252
 * comparison function returns ZERO.
253
 *
254
 * @param list      The list head.
255
 * @param value     The user defined value to be passed in the comparison 
256
 *                  function
257
 * @param comp      The comparison function, which should return ZERO to 
258
 *                  indicate that the searched value is found.
259
 *
260
 * @return The first node that matched, or NULL if it is not found.
261
 */
262
PJ_IDECL(pj_list_type*) pj_list_search(pj_list_type *list, void *value,
263
                                       int (*comp)(void *value, 
264
                                                   const pj_list_type *node)
265
                                       );
266
267
268
/**
269
 * Traverse the list to get the number of elements in the list.
270
 *
271
 * @param list      The list head.
272
 *
273
 * @return          Number of elements.
274
 */
275
PJ_IDECL(pj_size_t) pj_list_size(const pj_list_type *list);
276
277
278
/**
279
 * @}
280
 */
281
282
#if PJ_FUNCTIONS_ARE_INLINED
283
#  include "list_i.h"
284
#endif
285
286
PJ_END_DECL
287
288
#endif  /* __PJ_LIST_H__ */
289