/src/haproxy/include/import/eb32tree.h
Line | Count | Source |
1 | | /* |
2 | | * Elastic Binary Trees - macros and structures for operations on 32bit nodes. |
3 | | * Version 6.0.6 |
4 | | * (C) 2002-2011 - Willy Tarreau <w@1wt.eu> |
5 | | * |
6 | | * This library is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation, version 2.1 |
9 | | * exclusively. |
10 | | * |
11 | | * This library is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with this library; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | #ifndef _EB32TREE_H |
22 | | #define _EB32TREE_H |
23 | | |
24 | | #include "ebtree.h" |
25 | | |
26 | | |
27 | | /* Return the structure of type <type> whose member <member> points to <ptr> */ |
28 | 0 | #define eb32_entry(ptr, type, member) container_of(ptr, type, member) |
29 | | |
30 | | /* |
31 | | * Exported functions and macros. |
32 | | * Many of them are always inlined because they are extremely small, and |
33 | | * are generally called at most once or twice in a program. |
34 | | */ |
35 | | |
36 | | /* Return leftmost node in the tree, or NULL if none */ |
37 | | static inline struct eb32_node *eb32_first(struct eb_root *root) |
38 | 0 | { |
39 | 0 | return eb32_entry(eb_first(root), struct eb32_node, node); |
40 | 0 | } Unexecuted instantiation: http.c:eb32_first Unexecuted instantiation: tools.c:eb32_first Unexecuted instantiation: applet.c:eb32_first Unexecuted instantiation: cfgparse.c:eb32_first Unexecuted instantiation: channel.c:eb32_first Unexecuted instantiation: chunk.c:eb32_first Unexecuted instantiation: cli.c:eb32_first Unexecuted instantiation: clock.c:eb32_first Unexecuted instantiation: connection.c:eb32_first Unexecuted instantiation: debug.c:eb32_first Unexecuted instantiation: dgram.c:eb32_first Unexecuted instantiation: dynbuf.c:eb32_first Unexecuted instantiation: eb32tree.c:eb32_first Unexecuted instantiation: errors.c:eb32_first Unexecuted instantiation: fd.c:eb32_first Unexecuted instantiation: freq_ctr.c:eb32_first Unexecuted instantiation: frontend.c:eb32_first Unexecuted instantiation: haproxy.c:eb32_first Unexecuted instantiation: http_ana.c:eb32_first Unexecuted instantiation: http_ext.c:eb32_first Unexecuted instantiation: http_htx.c:eb32_first Unexecuted instantiation: http_rules.c:eb32_first Unexecuted instantiation: limits.c:eb32_first Unexecuted instantiation: listener.c:eb32_first Unexecuted instantiation: log.c:eb32_first Unexecuted instantiation: mailers.c:eb32_first Unexecuted instantiation: mworker.c:eb32_first Unexecuted instantiation: peers.c:eb32_first Unexecuted instantiation: pool.c:eb32_first Unexecuted instantiation: proto_rhttp.c:eb32_first Unexecuted instantiation: proto_sockpair.c:eb32_first Unexecuted instantiation: protocol.c:eb32_first Unexecuted instantiation: proxy.c:eb32_first Unexecuted instantiation: queue.c:eb32_first Unexecuted instantiation: regex.c:eb32_first Unexecuted instantiation: resolvers.c:eb32_first Unexecuted instantiation: ring.c:eb32_first Unexecuted instantiation: sample.c:eb32_first Unexecuted instantiation: server.c:eb32_first Unexecuted instantiation: session.c:eb32_first Unexecuted instantiation: signal.c:eb32_first Unexecuted instantiation: sink.c:eb32_first Unexecuted instantiation: sock.c:eb32_first Unexecuted instantiation: sock_inet.c:eb32_first Unexecuted instantiation: stats-html.c:eb32_first Unexecuted instantiation: stats-proxy.c:eb32_first Unexecuted instantiation: stats.c:eb32_first Unexecuted instantiation: stconn.c:eb32_first Unexecuted instantiation: stick_table.c:eb32_first Unexecuted instantiation: stream.c:eb32_first Unexecuted instantiation: systemd.c:eb32_first Unexecuted instantiation: task.c:eb32_first Unexecuted instantiation: tcp_rules.c:eb32_first Unexecuted instantiation: tcpcheck.c:eb32_first Unexecuted instantiation: thread.c:eb32_first Unexecuted instantiation: trace.c:eb32_first Unexecuted instantiation: vars.c:eb32_first Unexecuted instantiation: acl.c:eb32_first Unexecuted instantiation: action.c:eb32_first Unexecuted instantiation: activity.c:eb32_first Unexecuted instantiation: arg.c:eb32_first Unexecuted instantiation: backend.c:eb32_first Unexecuted instantiation: cfgcond.c:eb32_first Unexecuted instantiation: cfgparse-global.c:eb32_first Unexecuted instantiation: cfgparse-listen.c:eb32_first Unexecuted instantiation: check.c:eb32_first Unexecuted instantiation: compression.c:eb32_first Unexecuted instantiation: counters.c:eb32_first Unexecuted instantiation: dict.c:eb32_first Unexecuted instantiation: dns.c:eb32_first Unexecuted instantiation: dns_ring.c:eb32_first Unexecuted instantiation: ebimtree.c:eb32_first Unexecuted instantiation: ebistree.c:eb32_first Unexecuted instantiation: event_hdl.c:eb32_first Unexecuted instantiation: extcheck.c:eb32_first Unexecuted instantiation: filters.c:eb32_first Unexecuted instantiation: fix.c:eb32_first Unexecuted instantiation: flt_decomp.c:eb32_first Unexecuted instantiation: flt_http_comp.c:eb32_first Unexecuted instantiation: guid.c:eb32_first Unexecuted instantiation: h1.c:eb32_first Unexecuted instantiation: haterm.c:eb32_first Unexecuted instantiation: http_fetch.c:eb32_first Unexecuted instantiation: lb_chash.c:eb32_first Unexecuted instantiation: lb_fas.c:eb32_first Unexecuted instantiation: lb_fwlc.c:eb32_first Unexecuted instantiation: lb_fwrr.c:eb32_first Unexecuted instantiation: lb_map.c:eb32_first Unexecuted instantiation: mqtt.c:eb32_first Unexecuted instantiation: mux_spop.c:eb32_first Unexecuted instantiation: pattern.c:eb32_first Unexecuted instantiation: payload.c:eb32_first Unexecuted instantiation: proto_tcp.c:eb32_first Unexecuted instantiation: stats-file.c:eb32_first Unexecuted instantiation: stats-json.c:eb32_first Unexecuted instantiation: cache.c:eb32_first Unexecuted instantiation: fcgi-app.c:eb32_first Unexecuted instantiation: flt_spoe.c:eb32_first Unexecuted instantiation: h1_htx.c:eb32_first Unexecuted instantiation: shctx.c:eb32_first |
41 | | |
42 | | /* Return rightmost node in the tree, or NULL if none */ |
43 | | static inline struct eb32_node *eb32_last(struct eb_root *root) |
44 | 0 | { |
45 | 0 | return eb32_entry(eb_last(root), struct eb32_node, node); |
46 | 0 | } Unexecuted instantiation: http.c:eb32_last Unexecuted instantiation: tools.c:eb32_last Unexecuted instantiation: applet.c:eb32_last Unexecuted instantiation: cfgparse.c:eb32_last Unexecuted instantiation: channel.c:eb32_last Unexecuted instantiation: chunk.c:eb32_last Unexecuted instantiation: cli.c:eb32_last Unexecuted instantiation: clock.c:eb32_last Unexecuted instantiation: connection.c:eb32_last Unexecuted instantiation: debug.c:eb32_last Unexecuted instantiation: dgram.c:eb32_last Unexecuted instantiation: dynbuf.c:eb32_last Unexecuted instantiation: eb32tree.c:eb32_last Unexecuted instantiation: errors.c:eb32_last Unexecuted instantiation: fd.c:eb32_last Unexecuted instantiation: freq_ctr.c:eb32_last Unexecuted instantiation: frontend.c:eb32_last Unexecuted instantiation: haproxy.c:eb32_last Unexecuted instantiation: http_ana.c:eb32_last Unexecuted instantiation: http_ext.c:eb32_last Unexecuted instantiation: http_htx.c:eb32_last Unexecuted instantiation: http_rules.c:eb32_last Unexecuted instantiation: limits.c:eb32_last Unexecuted instantiation: listener.c:eb32_last Unexecuted instantiation: log.c:eb32_last Unexecuted instantiation: mailers.c:eb32_last Unexecuted instantiation: mworker.c:eb32_last Unexecuted instantiation: peers.c:eb32_last Unexecuted instantiation: pool.c:eb32_last Unexecuted instantiation: proto_rhttp.c:eb32_last Unexecuted instantiation: proto_sockpair.c:eb32_last Unexecuted instantiation: protocol.c:eb32_last Unexecuted instantiation: proxy.c:eb32_last Unexecuted instantiation: queue.c:eb32_last Unexecuted instantiation: regex.c:eb32_last Unexecuted instantiation: resolvers.c:eb32_last Unexecuted instantiation: ring.c:eb32_last Unexecuted instantiation: sample.c:eb32_last Unexecuted instantiation: server.c:eb32_last Unexecuted instantiation: session.c:eb32_last Unexecuted instantiation: signal.c:eb32_last Unexecuted instantiation: sink.c:eb32_last Unexecuted instantiation: sock.c:eb32_last Unexecuted instantiation: sock_inet.c:eb32_last Unexecuted instantiation: stats-html.c:eb32_last Unexecuted instantiation: stats-proxy.c:eb32_last Unexecuted instantiation: stats.c:eb32_last Unexecuted instantiation: stconn.c:eb32_last Unexecuted instantiation: stick_table.c:eb32_last Unexecuted instantiation: stream.c:eb32_last Unexecuted instantiation: systemd.c:eb32_last Unexecuted instantiation: task.c:eb32_last Unexecuted instantiation: tcp_rules.c:eb32_last Unexecuted instantiation: tcpcheck.c:eb32_last Unexecuted instantiation: thread.c:eb32_last Unexecuted instantiation: trace.c:eb32_last Unexecuted instantiation: vars.c:eb32_last Unexecuted instantiation: acl.c:eb32_last Unexecuted instantiation: action.c:eb32_last Unexecuted instantiation: activity.c:eb32_last Unexecuted instantiation: arg.c:eb32_last Unexecuted instantiation: backend.c:eb32_last Unexecuted instantiation: cfgcond.c:eb32_last Unexecuted instantiation: cfgparse-global.c:eb32_last Unexecuted instantiation: cfgparse-listen.c:eb32_last Unexecuted instantiation: check.c:eb32_last Unexecuted instantiation: compression.c:eb32_last Unexecuted instantiation: counters.c:eb32_last Unexecuted instantiation: dict.c:eb32_last Unexecuted instantiation: dns.c:eb32_last Unexecuted instantiation: dns_ring.c:eb32_last Unexecuted instantiation: ebimtree.c:eb32_last Unexecuted instantiation: ebistree.c:eb32_last Unexecuted instantiation: event_hdl.c:eb32_last Unexecuted instantiation: extcheck.c:eb32_last Unexecuted instantiation: filters.c:eb32_last Unexecuted instantiation: fix.c:eb32_last Unexecuted instantiation: flt_decomp.c:eb32_last Unexecuted instantiation: flt_http_comp.c:eb32_last Unexecuted instantiation: guid.c:eb32_last Unexecuted instantiation: h1.c:eb32_last Unexecuted instantiation: haterm.c:eb32_last Unexecuted instantiation: http_fetch.c:eb32_last Unexecuted instantiation: lb_chash.c:eb32_last Unexecuted instantiation: lb_fas.c:eb32_last Unexecuted instantiation: lb_fwlc.c:eb32_last Unexecuted instantiation: lb_fwrr.c:eb32_last Unexecuted instantiation: lb_map.c:eb32_last Unexecuted instantiation: mqtt.c:eb32_last Unexecuted instantiation: mux_spop.c:eb32_last Unexecuted instantiation: pattern.c:eb32_last Unexecuted instantiation: payload.c:eb32_last Unexecuted instantiation: proto_tcp.c:eb32_last Unexecuted instantiation: stats-file.c:eb32_last Unexecuted instantiation: stats-json.c:eb32_last Unexecuted instantiation: cache.c:eb32_last Unexecuted instantiation: fcgi-app.c:eb32_last Unexecuted instantiation: flt_spoe.c:eb32_last Unexecuted instantiation: h1_htx.c:eb32_last Unexecuted instantiation: shctx.c:eb32_last |
47 | | |
48 | | /* Return next node in the tree, or NULL if none */ |
49 | | static inline struct eb32_node *eb32_next(struct eb32_node *eb32) |
50 | 0 | { |
51 | 0 | return eb32_entry(eb_next(&eb32->node), struct eb32_node, node); |
52 | 0 | } Unexecuted instantiation: http.c:eb32_next Unexecuted instantiation: tools.c:eb32_next Unexecuted instantiation: applet.c:eb32_next Unexecuted instantiation: cfgparse.c:eb32_next Unexecuted instantiation: channel.c:eb32_next Unexecuted instantiation: chunk.c:eb32_next Unexecuted instantiation: cli.c:eb32_next Unexecuted instantiation: clock.c:eb32_next Unexecuted instantiation: connection.c:eb32_next Unexecuted instantiation: debug.c:eb32_next Unexecuted instantiation: dgram.c:eb32_next Unexecuted instantiation: dynbuf.c:eb32_next Unexecuted instantiation: eb32tree.c:eb32_next Unexecuted instantiation: errors.c:eb32_next Unexecuted instantiation: fd.c:eb32_next Unexecuted instantiation: freq_ctr.c:eb32_next Unexecuted instantiation: frontend.c:eb32_next Unexecuted instantiation: haproxy.c:eb32_next Unexecuted instantiation: http_ana.c:eb32_next Unexecuted instantiation: http_ext.c:eb32_next Unexecuted instantiation: http_htx.c:eb32_next Unexecuted instantiation: http_rules.c:eb32_next Unexecuted instantiation: limits.c:eb32_next Unexecuted instantiation: listener.c:eb32_next Unexecuted instantiation: log.c:eb32_next Unexecuted instantiation: mailers.c:eb32_next Unexecuted instantiation: mworker.c:eb32_next Unexecuted instantiation: peers.c:eb32_next Unexecuted instantiation: pool.c:eb32_next Unexecuted instantiation: proto_rhttp.c:eb32_next Unexecuted instantiation: proto_sockpair.c:eb32_next Unexecuted instantiation: protocol.c:eb32_next Unexecuted instantiation: proxy.c:eb32_next Unexecuted instantiation: queue.c:eb32_next Unexecuted instantiation: regex.c:eb32_next Unexecuted instantiation: resolvers.c:eb32_next Unexecuted instantiation: ring.c:eb32_next Unexecuted instantiation: sample.c:eb32_next Unexecuted instantiation: server.c:eb32_next Unexecuted instantiation: session.c:eb32_next Unexecuted instantiation: signal.c:eb32_next Unexecuted instantiation: sink.c:eb32_next Unexecuted instantiation: sock.c:eb32_next Unexecuted instantiation: sock_inet.c:eb32_next Unexecuted instantiation: stats-html.c:eb32_next Unexecuted instantiation: stats-proxy.c:eb32_next Unexecuted instantiation: stats.c:eb32_next Unexecuted instantiation: stconn.c:eb32_next Unexecuted instantiation: stick_table.c:eb32_next Unexecuted instantiation: stream.c:eb32_next Unexecuted instantiation: systemd.c:eb32_next Unexecuted instantiation: task.c:eb32_next Unexecuted instantiation: tcp_rules.c:eb32_next Unexecuted instantiation: tcpcheck.c:eb32_next Unexecuted instantiation: thread.c:eb32_next Unexecuted instantiation: trace.c:eb32_next Unexecuted instantiation: vars.c:eb32_next Unexecuted instantiation: acl.c:eb32_next Unexecuted instantiation: action.c:eb32_next Unexecuted instantiation: activity.c:eb32_next Unexecuted instantiation: arg.c:eb32_next Unexecuted instantiation: backend.c:eb32_next Unexecuted instantiation: cfgcond.c:eb32_next Unexecuted instantiation: cfgparse-global.c:eb32_next Unexecuted instantiation: cfgparse-listen.c:eb32_next Unexecuted instantiation: check.c:eb32_next Unexecuted instantiation: compression.c:eb32_next Unexecuted instantiation: counters.c:eb32_next Unexecuted instantiation: dict.c:eb32_next Unexecuted instantiation: dns.c:eb32_next Unexecuted instantiation: dns_ring.c:eb32_next Unexecuted instantiation: ebimtree.c:eb32_next Unexecuted instantiation: ebistree.c:eb32_next Unexecuted instantiation: event_hdl.c:eb32_next Unexecuted instantiation: extcheck.c:eb32_next Unexecuted instantiation: filters.c:eb32_next Unexecuted instantiation: fix.c:eb32_next Unexecuted instantiation: flt_decomp.c:eb32_next Unexecuted instantiation: flt_http_comp.c:eb32_next Unexecuted instantiation: guid.c:eb32_next Unexecuted instantiation: h1.c:eb32_next Unexecuted instantiation: haterm.c:eb32_next Unexecuted instantiation: http_fetch.c:eb32_next Unexecuted instantiation: lb_chash.c:eb32_next Unexecuted instantiation: lb_fas.c:eb32_next Unexecuted instantiation: lb_fwlc.c:eb32_next Unexecuted instantiation: lb_fwrr.c:eb32_next Unexecuted instantiation: lb_map.c:eb32_next Unexecuted instantiation: mqtt.c:eb32_next Unexecuted instantiation: mux_spop.c:eb32_next Unexecuted instantiation: pattern.c:eb32_next Unexecuted instantiation: payload.c:eb32_next Unexecuted instantiation: proto_tcp.c:eb32_next Unexecuted instantiation: stats-file.c:eb32_next Unexecuted instantiation: stats-json.c:eb32_next Unexecuted instantiation: cache.c:eb32_next Unexecuted instantiation: fcgi-app.c:eb32_next Unexecuted instantiation: flt_spoe.c:eb32_next Unexecuted instantiation: h1_htx.c:eb32_next Unexecuted instantiation: shctx.c:eb32_next |
53 | | |
54 | | /* Return previous node in the tree, or NULL if none */ |
55 | | static inline struct eb32_node *eb32_prev(struct eb32_node *eb32) |
56 | 0 | { |
57 | 0 | return eb32_entry(eb_prev(&eb32->node), struct eb32_node, node); |
58 | 0 | } Unexecuted instantiation: http.c:eb32_prev Unexecuted instantiation: tools.c:eb32_prev Unexecuted instantiation: applet.c:eb32_prev Unexecuted instantiation: cfgparse.c:eb32_prev Unexecuted instantiation: channel.c:eb32_prev Unexecuted instantiation: chunk.c:eb32_prev Unexecuted instantiation: cli.c:eb32_prev Unexecuted instantiation: clock.c:eb32_prev Unexecuted instantiation: connection.c:eb32_prev Unexecuted instantiation: debug.c:eb32_prev Unexecuted instantiation: dgram.c:eb32_prev Unexecuted instantiation: dynbuf.c:eb32_prev Unexecuted instantiation: eb32tree.c:eb32_prev Unexecuted instantiation: errors.c:eb32_prev Unexecuted instantiation: fd.c:eb32_prev Unexecuted instantiation: freq_ctr.c:eb32_prev Unexecuted instantiation: frontend.c:eb32_prev Unexecuted instantiation: haproxy.c:eb32_prev Unexecuted instantiation: http_ana.c:eb32_prev Unexecuted instantiation: http_ext.c:eb32_prev Unexecuted instantiation: http_htx.c:eb32_prev Unexecuted instantiation: http_rules.c:eb32_prev Unexecuted instantiation: limits.c:eb32_prev Unexecuted instantiation: listener.c:eb32_prev Unexecuted instantiation: log.c:eb32_prev Unexecuted instantiation: mailers.c:eb32_prev Unexecuted instantiation: mworker.c:eb32_prev Unexecuted instantiation: peers.c:eb32_prev Unexecuted instantiation: pool.c:eb32_prev Unexecuted instantiation: proto_rhttp.c:eb32_prev Unexecuted instantiation: proto_sockpair.c:eb32_prev Unexecuted instantiation: protocol.c:eb32_prev Unexecuted instantiation: proxy.c:eb32_prev Unexecuted instantiation: queue.c:eb32_prev Unexecuted instantiation: regex.c:eb32_prev Unexecuted instantiation: resolvers.c:eb32_prev Unexecuted instantiation: ring.c:eb32_prev Unexecuted instantiation: sample.c:eb32_prev Unexecuted instantiation: server.c:eb32_prev Unexecuted instantiation: session.c:eb32_prev Unexecuted instantiation: signal.c:eb32_prev Unexecuted instantiation: sink.c:eb32_prev Unexecuted instantiation: sock.c:eb32_prev Unexecuted instantiation: sock_inet.c:eb32_prev Unexecuted instantiation: stats-html.c:eb32_prev Unexecuted instantiation: stats-proxy.c:eb32_prev Unexecuted instantiation: stats.c:eb32_prev Unexecuted instantiation: stconn.c:eb32_prev Unexecuted instantiation: stick_table.c:eb32_prev Unexecuted instantiation: stream.c:eb32_prev Unexecuted instantiation: systemd.c:eb32_prev Unexecuted instantiation: task.c:eb32_prev Unexecuted instantiation: tcp_rules.c:eb32_prev Unexecuted instantiation: tcpcheck.c:eb32_prev Unexecuted instantiation: thread.c:eb32_prev Unexecuted instantiation: trace.c:eb32_prev Unexecuted instantiation: vars.c:eb32_prev Unexecuted instantiation: acl.c:eb32_prev Unexecuted instantiation: action.c:eb32_prev Unexecuted instantiation: activity.c:eb32_prev Unexecuted instantiation: arg.c:eb32_prev Unexecuted instantiation: backend.c:eb32_prev Unexecuted instantiation: cfgcond.c:eb32_prev Unexecuted instantiation: cfgparse-global.c:eb32_prev Unexecuted instantiation: cfgparse-listen.c:eb32_prev Unexecuted instantiation: check.c:eb32_prev Unexecuted instantiation: compression.c:eb32_prev Unexecuted instantiation: counters.c:eb32_prev Unexecuted instantiation: dict.c:eb32_prev Unexecuted instantiation: dns.c:eb32_prev Unexecuted instantiation: dns_ring.c:eb32_prev Unexecuted instantiation: ebimtree.c:eb32_prev Unexecuted instantiation: ebistree.c:eb32_prev Unexecuted instantiation: event_hdl.c:eb32_prev Unexecuted instantiation: extcheck.c:eb32_prev Unexecuted instantiation: filters.c:eb32_prev Unexecuted instantiation: fix.c:eb32_prev Unexecuted instantiation: flt_decomp.c:eb32_prev Unexecuted instantiation: flt_http_comp.c:eb32_prev Unexecuted instantiation: guid.c:eb32_prev Unexecuted instantiation: h1.c:eb32_prev Unexecuted instantiation: haterm.c:eb32_prev Unexecuted instantiation: http_fetch.c:eb32_prev Unexecuted instantiation: lb_chash.c:eb32_prev Unexecuted instantiation: lb_fas.c:eb32_prev Unexecuted instantiation: lb_fwlc.c:eb32_prev Unexecuted instantiation: lb_fwrr.c:eb32_prev Unexecuted instantiation: lb_map.c:eb32_prev Unexecuted instantiation: mqtt.c:eb32_prev Unexecuted instantiation: mux_spop.c:eb32_prev Unexecuted instantiation: pattern.c:eb32_prev Unexecuted instantiation: payload.c:eb32_prev Unexecuted instantiation: proto_tcp.c:eb32_prev Unexecuted instantiation: stats-file.c:eb32_prev Unexecuted instantiation: stats-json.c:eb32_prev Unexecuted instantiation: cache.c:eb32_prev Unexecuted instantiation: fcgi-app.c:eb32_prev Unexecuted instantiation: flt_spoe.c:eb32_prev Unexecuted instantiation: h1_htx.c:eb32_prev Unexecuted instantiation: shctx.c:eb32_prev |
59 | | |
60 | | /* Return next leaf node within a duplicate sub-tree, or NULL if none. */ |
61 | | static inline struct eb32_node *eb32_next_dup(struct eb32_node *eb32) |
62 | 0 | { |
63 | 0 | return eb32_entry(eb_next_dup(&eb32->node), struct eb32_node, node); |
64 | 0 | } Unexecuted instantiation: http.c:eb32_next_dup Unexecuted instantiation: tools.c:eb32_next_dup Unexecuted instantiation: applet.c:eb32_next_dup Unexecuted instantiation: cfgparse.c:eb32_next_dup Unexecuted instantiation: channel.c:eb32_next_dup Unexecuted instantiation: chunk.c:eb32_next_dup Unexecuted instantiation: cli.c:eb32_next_dup Unexecuted instantiation: clock.c:eb32_next_dup Unexecuted instantiation: connection.c:eb32_next_dup Unexecuted instantiation: debug.c:eb32_next_dup Unexecuted instantiation: dgram.c:eb32_next_dup Unexecuted instantiation: dynbuf.c:eb32_next_dup Unexecuted instantiation: eb32tree.c:eb32_next_dup Unexecuted instantiation: errors.c:eb32_next_dup Unexecuted instantiation: fd.c:eb32_next_dup Unexecuted instantiation: freq_ctr.c:eb32_next_dup Unexecuted instantiation: frontend.c:eb32_next_dup Unexecuted instantiation: haproxy.c:eb32_next_dup Unexecuted instantiation: http_ana.c:eb32_next_dup Unexecuted instantiation: http_ext.c:eb32_next_dup Unexecuted instantiation: http_htx.c:eb32_next_dup Unexecuted instantiation: http_rules.c:eb32_next_dup Unexecuted instantiation: limits.c:eb32_next_dup Unexecuted instantiation: listener.c:eb32_next_dup Unexecuted instantiation: log.c:eb32_next_dup Unexecuted instantiation: mailers.c:eb32_next_dup Unexecuted instantiation: mworker.c:eb32_next_dup Unexecuted instantiation: peers.c:eb32_next_dup Unexecuted instantiation: pool.c:eb32_next_dup Unexecuted instantiation: proto_rhttp.c:eb32_next_dup Unexecuted instantiation: proto_sockpair.c:eb32_next_dup Unexecuted instantiation: protocol.c:eb32_next_dup Unexecuted instantiation: proxy.c:eb32_next_dup Unexecuted instantiation: queue.c:eb32_next_dup Unexecuted instantiation: regex.c:eb32_next_dup Unexecuted instantiation: resolvers.c:eb32_next_dup Unexecuted instantiation: ring.c:eb32_next_dup Unexecuted instantiation: sample.c:eb32_next_dup Unexecuted instantiation: server.c:eb32_next_dup Unexecuted instantiation: session.c:eb32_next_dup Unexecuted instantiation: signal.c:eb32_next_dup Unexecuted instantiation: sink.c:eb32_next_dup Unexecuted instantiation: sock.c:eb32_next_dup Unexecuted instantiation: sock_inet.c:eb32_next_dup Unexecuted instantiation: stats-html.c:eb32_next_dup Unexecuted instantiation: stats-proxy.c:eb32_next_dup Unexecuted instantiation: stats.c:eb32_next_dup Unexecuted instantiation: stconn.c:eb32_next_dup Unexecuted instantiation: stick_table.c:eb32_next_dup Unexecuted instantiation: stream.c:eb32_next_dup Unexecuted instantiation: systemd.c:eb32_next_dup Unexecuted instantiation: task.c:eb32_next_dup Unexecuted instantiation: tcp_rules.c:eb32_next_dup Unexecuted instantiation: tcpcheck.c:eb32_next_dup Unexecuted instantiation: thread.c:eb32_next_dup Unexecuted instantiation: trace.c:eb32_next_dup Unexecuted instantiation: vars.c:eb32_next_dup Unexecuted instantiation: acl.c:eb32_next_dup Unexecuted instantiation: action.c:eb32_next_dup Unexecuted instantiation: activity.c:eb32_next_dup Unexecuted instantiation: arg.c:eb32_next_dup Unexecuted instantiation: backend.c:eb32_next_dup Unexecuted instantiation: cfgcond.c:eb32_next_dup Unexecuted instantiation: cfgparse-global.c:eb32_next_dup Unexecuted instantiation: cfgparse-listen.c:eb32_next_dup Unexecuted instantiation: check.c:eb32_next_dup Unexecuted instantiation: compression.c:eb32_next_dup Unexecuted instantiation: counters.c:eb32_next_dup Unexecuted instantiation: dict.c:eb32_next_dup Unexecuted instantiation: dns.c:eb32_next_dup Unexecuted instantiation: dns_ring.c:eb32_next_dup Unexecuted instantiation: ebimtree.c:eb32_next_dup Unexecuted instantiation: ebistree.c:eb32_next_dup Unexecuted instantiation: event_hdl.c:eb32_next_dup Unexecuted instantiation: extcheck.c:eb32_next_dup Unexecuted instantiation: filters.c:eb32_next_dup Unexecuted instantiation: fix.c:eb32_next_dup Unexecuted instantiation: flt_decomp.c:eb32_next_dup Unexecuted instantiation: flt_http_comp.c:eb32_next_dup Unexecuted instantiation: guid.c:eb32_next_dup Unexecuted instantiation: h1.c:eb32_next_dup Unexecuted instantiation: haterm.c:eb32_next_dup Unexecuted instantiation: http_fetch.c:eb32_next_dup Unexecuted instantiation: lb_chash.c:eb32_next_dup Unexecuted instantiation: lb_fas.c:eb32_next_dup Unexecuted instantiation: lb_fwlc.c:eb32_next_dup Unexecuted instantiation: lb_fwrr.c:eb32_next_dup Unexecuted instantiation: lb_map.c:eb32_next_dup Unexecuted instantiation: mqtt.c:eb32_next_dup Unexecuted instantiation: mux_spop.c:eb32_next_dup Unexecuted instantiation: pattern.c:eb32_next_dup Unexecuted instantiation: payload.c:eb32_next_dup Unexecuted instantiation: proto_tcp.c:eb32_next_dup Unexecuted instantiation: stats-file.c:eb32_next_dup Unexecuted instantiation: stats-json.c:eb32_next_dup Unexecuted instantiation: cache.c:eb32_next_dup Unexecuted instantiation: fcgi-app.c:eb32_next_dup Unexecuted instantiation: flt_spoe.c:eb32_next_dup Unexecuted instantiation: h1_htx.c:eb32_next_dup Unexecuted instantiation: shctx.c:eb32_next_dup |
65 | | |
66 | | /* Return previous leaf node within a duplicate sub-tree, or NULL if none. */ |
67 | | static inline struct eb32_node *eb32_prev_dup(struct eb32_node *eb32) |
68 | 0 | { |
69 | 0 | return eb32_entry(eb_prev_dup(&eb32->node), struct eb32_node, node); |
70 | 0 | } Unexecuted instantiation: http.c:eb32_prev_dup Unexecuted instantiation: tools.c:eb32_prev_dup Unexecuted instantiation: applet.c:eb32_prev_dup Unexecuted instantiation: cfgparse.c:eb32_prev_dup Unexecuted instantiation: channel.c:eb32_prev_dup Unexecuted instantiation: chunk.c:eb32_prev_dup Unexecuted instantiation: cli.c:eb32_prev_dup Unexecuted instantiation: clock.c:eb32_prev_dup Unexecuted instantiation: connection.c:eb32_prev_dup Unexecuted instantiation: debug.c:eb32_prev_dup Unexecuted instantiation: dgram.c:eb32_prev_dup Unexecuted instantiation: dynbuf.c:eb32_prev_dup Unexecuted instantiation: eb32tree.c:eb32_prev_dup Unexecuted instantiation: errors.c:eb32_prev_dup Unexecuted instantiation: fd.c:eb32_prev_dup Unexecuted instantiation: freq_ctr.c:eb32_prev_dup Unexecuted instantiation: frontend.c:eb32_prev_dup Unexecuted instantiation: haproxy.c:eb32_prev_dup Unexecuted instantiation: http_ana.c:eb32_prev_dup Unexecuted instantiation: http_ext.c:eb32_prev_dup Unexecuted instantiation: http_htx.c:eb32_prev_dup Unexecuted instantiation: http_rules.c:eb32_prev_dup Unexecuted instantiation: limits.c:eb32_prev_dup Unexecuted instantiation: listener.c:eb32_prev_dup Unexecuted instantiation: log.c:eb32_prev_dup Unexecuted instantiation: mailers.c:eb32_prev_dup Unexecuted instantiation: mworker.c:eb32_prev_dup Unexecuted instantiation: peers.c:eb32_prev_dup Unexecuted instantiation: pool.c:eb32_prev_dup Unexecuted instantiation: proto_rhttp.c:eb32_prev_dup Unexecuted instantiation: proto_sockpair.c:eb32_prev_dup Unexecuted instantiation: protocol.c:eb32_prev_dup Unexecuted instantiation: proxy.c:eb32_prev_dup Unexecuted instantiation: queue.c:eb32_prev_dup Unexecuted instantiation: regex.c:eb32_prev_dup Unexecuted instantiation: resolvers.c:eb32_prev_dup Unexecuted instantiation: ring.c:eb32_prev_dup Unexecuted instantiation: sample.c:eb32_prev_dup Unexecuted instantiation: server.c:eb32_prev_dup Unexecuted instantiation: session.c:eb32_prev_dup Unexecuted instantiation: signal.c:eb32_prev_dup Unexecuted instantiation: sink.c:eb32_prev_dup Unexecuted instantiation: sock.c:eb32_prev_dup Unexecuted instantiation: sock_inet.c:eb32_prev_dup Unexecuted instantiation: stats-html.c:eb32_prev_dup Unexecuted instantiation: stats-proxy.c:eb32_prev_dup Unexecuted instantiation: stats.c:eb32_prev_dup Unexecuted instantiation: stconn.c:eb32_prev_dup Unexecuted instantiation: stick_table.c:eb32_prev_dup Unexecuted instantiation: stream.c:eb32_prev_dup Unexecuted instantiation: systemd.c:eb32_prev_dup Unexecuted instantiation: task.c:eb32_prev_dup Unexecuted instantiation: tcp_rules.c:eb32_prev_dup Unexecuted instantiation: tcpcheck.c:eb32_prev_dup Unexecuted instantiation: thread.c:eb32_prev_dup Unexecuted instantiation: trace.c:eb32_prev_dup Unexecuted instantiation: vars.c:eb32_prev_dup Unexecuted instantiation: acl.c:eb32_prev_dup Unexecuted instantiation: action.c:eb32_prev_dup Unexecuted instantiation: activity.c:eb32_prev_dup Unexecuted instantiation: arg.c:eb32_prev_dup Unexecuted instantiation: backend.c:eb32_prev_dup Unexecuted instantiation: cfgcond.c:eb32_prev_dup Unexecuted instantiation: cfgparse-global.c:eb32_prev_dup Unexecuted instantiation: cfgparse-listen.c:eb32_prev_dup Unexecuted instantiation: check.c:eb32_prev_dup Unexecuted instantiation: compression.c:eb32_prev_dup Unexecuted instantiation: counters.c:eb32_prev_dup Unexecuted instantiation: dict.c:eb32_prev_dup Unexecuted instantiation: dns.c:eb32_prev_dup Unexecuted instantiation: dns_ring.c:eb32_prev_dup Unexecuted instantiation: ebimtree.c:eb32_prev_dup Unexecuted instantiation: ebistree.c:eb32_prev_dup Unexecuted instantiation: event_hdl.c:eb32_prev_dup Unexecuted instantiation: extcheck.c:eb32_prev_dup Unexecuted instantiation: filters.c:eb32_prev_dup Unexecuted instantiation: fix.c:eb32_prev_dup Unexecuted instantiation: flt_decomp.c:eb32_prev_dup Unexecuted instantiation: flt_http_comp.c:eb32_prev_dup Unexecuted instantiation: guid.c:eb32_prev_dup Unexecuted instantiation: h1.c:eb32_prev_dup Unexecuted instantiation: haterm.c:eb32_prev_dup Unexecuted instantiation: http_fetch.c:eb32_prev_dup Unexecuted instantiation: lb_chash.c:eb32_prev_dup Unexecuted instantiation: lb_fas.c:eb32_prev_dup Unexecuted instantiation: lb_fwlc.c:eb32_prev_dup Unexecuted instantiation: lb_fwrr.c:eb32_prev_dup Unexecuted instantiation: lb_map.c:eb32_prev_dup Unexecuted instantiation: mqtt.c:eb32_prev_dup Unexecuted instantiation: mux_spop.c:eb32_prev_dup Unexecuted instantiation: pattern.c:eb32_prev_dup Unexecuted instantiation: payload.c:eb32_prev_dup Unexecuted instantiation: proto_tcp.c:eb32_prev_dup Unexecuted instantiation: stats-file.c:eb32_prev_dup Unexecuted instantiation: stats-json.c:eb32_prev_dup Unexecuted instantiation: cache.c:eb32_prev_dup Unexecuted instantiation: fcgi-app.c:eb32_prev_dup Unexecuted instantiation: flt_spoe.c:eb32_prev_dup Unexecuted instantiation: h1_htx.c:eb32_prev_dup Unexecuted instantiation: shctx.c:eb32_prev_dup |
71 | | |
72 | | /* Return next node in the tree, skipping duplicates, or NULL if none */ |
73 | | static inline struct eb32_node *eb32_next_unique(struct eb32_node *eb32) |
74 | 0 | { |
75 | 0 | return eb32_entry(eb_next_unique(&eb32->node), struct eb32_node, node); |
76 | 0 | } Unexecuted instantiation: http.c:eb32_next_unique Unexecuted instantiation: tools.c:eb32_next_unique Unexecuted instantiation: applet.c:eb32_next_unique Unexecuted instantiation: cfgparse.c:eb32_next_unique Unexecuted instantiation: channel.c:eb32_next_unique Unexecuted instantiation: chunk.c:eb32_next_unique Unexecuted instantiation: cli.c:eb32_next_unique Unexecuted instantiation: clock.c:eb32_next_unique Unexecuted instantiation: connection.c:eb32_next_unique Unexecuted instantiation: debug.c:eb32_next_unique Unexecuted instantiation: dgram.c:eb32_next_unique Unexecuted instantiation: dynbuf.c:eb32_next_unique Unexecuted instantiation: eb32tree.c:eb32_next_unique Unexecuted instantiation: errors.c:eb32_next_unique Unexecuted instantiation: fd.c:eb32_next_unique Unexecuted instantiation: freq_ctr.c:eb32_next_unique Unexecuted instantiation: frontend.c:eb32_next_unique Unexecuted instantiation: haproxy.c:eb32_next_unique Unexecuted instantiation: http_ana.c:eb32_next_unique Unexecuted instantiation: http_ext.c:eb32_next_unique Unexecuted instantiation: http_htx.c:eb32_next_unique Unexecuted instantiation: http_rules.c:eb32_next_unique Unexecuted instantiation: limits.c:eb32_next_unique Unexecuted instantiation: listener.c:eb32_next_unique Unexecuted instantiation: log.c:eb32_next_unique Unexecuted instantiation: mailers.c:eb32_next_unique Unexecuted instantiation: mworker.c:eb32_next_unique Unexecuted instantiation: peers.c:eb32_next_unique Unexecuted instantiation: pool.c:eb32_next_unique Unexecuted instantiation: proto_rhttp.c:eb32_next_unique Unexecuted instantiation: proto_sockpair.c:eb32_next_unique Unexecuted instantiation: protocol.c:eb32_next_unique Unexecuted instantiation: proxy.c:eb32_next_unique Unexecuted instantiation: queue.c:eb32_next_unique Unexecuted instantiation: regex.c:eb32_next_unique Unexecuted instantiation: resolvers.c:eb32_next_unique Unexecuted instantiation: ring.c:eb32_next_unique Unexecuted instantiation: sample.c:eb32_next_unique Unexecuted instantiation: server.c:eb32_next_unique Unexecuted instantiation: session.c:eb32_next_unique Unexecuted instantiation: signal.c:eb32_next_unique Unexecuted instantiation: sink.c:eb32_next_unique Unexecuted instantiation: sock.c:eb32_next_unique Unexecuted instantiation: sock_inet.c:eb32_next_unique Unexecuted instantiation: stats-html.c:eb32_next_unique Unexecuted instantiation: stats-proxy.c:eb32_next_unique Unexecuted instantiation: stats.c:eb32_next_unique Unexecuted instantiation: stconn.c:eb32_next_unique Unexecuted instantiation: stick_table.c:eb32_next_unique Unexecuted instantiation: stream.c:eb32_next_unique Unexecuted instantiation: systemd.c:eb32_next_unique Unexecuted instantiation: task.c:eb32_next_unique Unexecuted instantiation: tcp_rules.c:eb32_next_unique Unexecuted instantiation: tcpcheck.c:eb32_next_unique Unexecuted instantiation: thread.c:eb32_next_unique Unexecuted instantiation: trace.c:eb32_next_unique Unexecuted instantiation: vars.c:eb32_next_unique Unexecuted instantiation: acl.c:eb32_next_unique Unexecuted instantiation: action.c:eb32_next_unique Unexecuted instantiation: activity.c:eb32_next_unique Unexecuted instantiation: arg.c:eb32_next_unique Unexecuted instantiation: backend.c:eb32_next_unique Unexecuted instantiation: cfgcond.c:eb32_next_unique Unexecuted instantiation: cfgparse-global.c:eb32_next_unique Unexecuted instantiation: cfgparse-listen.c:eb32_next_unique Unexecuted instantiation: check.c:eb32_next_unique Unexecuted instantiation: compression.c:eb32_next_unique Unexecuted instantiation: counters.c:eb32_next_unique Unexecuted instantiation: dict.c:eb32_next_unique Unexecuted instantiation: dns.c:eb32_next_unique Unexecuted instantiation: dns_ring.c:eb32_next_unique Unexecuted instantiation: ebimtree.c:eb32_next_unique Unexecuted instantiation: ebistree.c:eb32_next_unique Unexecuted instantiation: event_hdl.c:eb32_next_unique Unexecuted instantiation: extcheck.c:eb32_next_unique Unexecuted instantiation: filters.c:eb32_next_unique Unexecuted instantiation: fix.c:eb32_next_unique Unexecuted instantiation: flt_decomp.c:eb32_next_unique Unexecuted instantiation: flt_http_comp.c:eb32_next_unique Unexecuted instantiation: guid.c:eb32_next_unique Unexecuted instantiation: h1.c:eb32_next_unique Unexecuted instantiation: haterm.c:eb32_next_unique Unexecuted instantiation: http_fetch.c:eb32_next_unique Unexecuted instantiation: lb_chash.c:eb32_next_unique Unexecuted instantiation: lb_fas.c:eb32_next_unique Unexecuted instantiation: lb_fwlc.c:eb32_next_unique Unexecuted instantiation: lb_fwrr.c:eb32_next_unique Unexecuted instantiation: lb_map.c:eb32_next_unique Unexecuted instantiation: mqtt.c:eb32_next_unique Unexecuted instantiation: mux_spop.c:eb32_next_unique Unexecuted instantiation: pattern.c:eb32_next_unique Unexecuted instantiation: payload.c:eb32_next_unique Unexecuted instantiation: proto_tcp.c:eb32_next_unique Unexecuted instantiation: stats-file.c:eb32_next_unique Unexecuted instantiation: stats-json.c:eb32_next_unique Unexecuted instantiation: cache.c:eb32_next_unique Unexecuted instantiation: fcgi-app.c:eb32_next_unique Unexecuted instantiation: flt_spoe.c:eb32_next_unique Unexecuted instantiation: h1_htx.c:eb32_next_unique Unexecuted instantiation: shctx.c:eb32_next_unique |
77 | | |
78 | | /* Return previous node in the tree, skipping duplicates, or NULL if none */ |
79 | | static inline struct eb32_node *eb32_prev_unique(struct eb32_node *eb32) |
80 | 0 | { |
81 | 0 | return eb32_entry(eb_prev_unique(&eb32->node), struct eb32_node, node); |
82 | 0 | } Unexecuted instantiation: http.c:eb32_prev_unique Unexecuted instantiation: tools.c:eb32_prev_unique Unexecuted instantiation: applet.c:eb32_prev_unique Unexecuted instantiation: cfgparse.c:eb32_prev_unique Unexecuted instantiation: channel.c:eb32_prev_unique Unexecuted instantiation: chunk.c:eb32_prev_unique Unexecuted instantiation: cli.c:eb32_prev_unique Unexecuted instantiation: clock.c:eb32_prev_unique Unexecuted instantiation: connection.c:eb32_prev_unique Unexecuted instantiation: debug.c:eb32_prev_unique Unexecuted instantiation: dgram.c:eb32_prev_unique Unexecuted instantiation: dynbuf.c:eb32_prev_unique Unexecuted instantiation: eb32tree.c:eb32_prev_unique Unexecuted instantiation: errors.c:eb32_prev_unique Unexecuted instantiation: fd.c:eb32_prev_unique Unexecuted instantiation: freq_ctr.c:eb32_prev_unique Unexecuted instantiation: frontend.c:eb32_prev_unique Unexecuted instantiation: haproxy.c:eb32_prev_unique Unexecuted instantiation: http_ana.c:eb32_prev_unique Unexecuted instantiation: http_ext.c:eb32_prev_unique Unexecuted instantiation: http_htx.c:eb32_prev_unique Unexecuted instantiation: http_rules.c:eb32_prev_unique Unexecuted instantiation: limits.c:eb32_prev_unique Unexecuted instantiation: listener.c:eb32_prev_unique Unexecuted instantiation: log.c:eb32_prev_unique Unexecuted instantiation: mailers.c:eb32_prev_unique Unexecuted instantiation: mworker.c:eb32_prev_unique Unexecuted instantiation: peers.c:eb32_prev_unique Unexecuted instantiation: pool.c:eb32_prev_unique Unexecuted instantiation: proto_rhttp.c:eb32_prev_unique Unexecuted instantiation: proto_sockpair.c:eb32_prev_unique Unexecuted instantiation: protocol.c:eb32_prev_unique Unexecuted instantiation: proxy.c:eb32_prev_unique Unexecuted instantiation: queue.c:eb32_prev_unique Unexecuted instantiation: regex.c:eb32_prev_unique Unexecuted instantiation: resolvers.c:eb32_prev_unique Unexecuted instantiation: ring.c:eb32_prev_unique Unexecuted instantiation: sample.c:eb32_prev_unique Unexecuted instantiation: server.c:eb32_prev_unique Unexecuted instantiation: session.c:eb32_prev_unique Unexecuted instantiation: signal.c:eb32_prev_unique Unexecuted instantiation: sink.c:eb32_prev_unique Unexecuted instantiation: sock.c:eb32_prev_unique Unexecuted instantiation: sock_inet.c:eb32_prev_unique Unexecuted instantiation: stats-html.c:eb32_prev_unique Unexecuted instantiation: stats-proxy.c:eb32_prev_unique Unexecuted instantiation: stats.c:eb32_prev_unique Unexecuted instantiation: stconn.c:eb32_prev_unique Unexecuted instantiation: stick_table.c:eb32_prev_unique Unexecuted instantiation: stream.c:eb32_prev_unique Unexecuted instantiation: systemd.c:eb32_prev_unique Unexecuted instantiation: task.c:eb32_prev_unique Unexecuted instantiation: tcp_rules.c:eb32_prev_unique Unexecuted instantiation: tcpcheck.c:eb32_prev_unique Unexecuted instantiation: thread.c:eb32_prev_unique Unexecuted instantiation: trace.c:eb32_prev_unique Unexecuted instantiation: vars.c:eb32_prev_unique Unexecuted instantiation: acl.c:eb32_prev_unique Unexecuted instantiation: action.c:eb32_prev_unique Unexecuted instantiation: activity.c:eb32_prev_unique Unexecuted instantiation: arg.c:eb32_prev_unique Unexecuted instantiation: backend.c:eb32_prev_unique Unexecuted instantiation: cfgcond.c:eb32_prev_unique Unexecuted instantiation: cfgparse-global.c:eb32_prev_unique Unexecuted instantiation: cfgparse-listen.c:eb32_prev_unique Unexecuted instantiation: check.c:eb32_prev_unique Unexecuted instantiation: compression.c:eb32_prev_unique Unexecuted instantiation: counters.c:eb32_prev_unique Unexecuted instantiation: dict.c:eb32_prev_unique Unexecuted instantiation: dns.c:eb32_prev_unique Unexecuted instantiation: dns_ring.c:eb32_prev_unique Unexecuted instantiation: ebimtree.c:eb32_prev_unique Unexecuted instantiation: ebistree.c:eb32_prev_unique Unexecuted instantiation: event_hdl.c:eb32_prev_unique Unexecuted instantiation: extcheck.c:eb32_prev_unique Unexecuted instantiation: filters.c:eb32_prev_unique Unexecuted instantiation: fix.c:eb32_prev_unique Unexecuted instantiation: flt_decomp.c:eb32_prev_unique Unexecuted instantiation: flt_http_comp.c:eb32_prev_unique Unexecuted instantiation: guid.c:eb32_prev_unique Unexecuted instantiation: h1.c:eb32_prev_unique Unexecuted instantiation: haterm.c:eb32_prev_unique Unexecuted instantiation: http_fetch.c:eb32_prev_unique Unexecuted instantiation: lb_chash.c:eb32_prev_unique Unexecuted instantiation: lb_fas.c:eb32_prev_unique Unexecuted instantiation: lb_fwlc.c:eb32_prev_unique Unexecuted instantiation: lb_fwrr.c:eb32_prev_unique Unexecuted instantiation: lb_map.c:eb32_prev_unique Unexecuted instantiation: mqtt.c:eb32_prev_unique Unexecuted instantiation: mux_spop.c:eb32_prev_unique Unexecuted instantiation: pattern.c:eb32_prev_unique Unexecuted instantiation: payload.c:eb32_prev_unique Unexecuted instantiation: proto_tcp.c:eb32_prev_unique Unexecuted instantiation: stats-file.c:eb32_prev_unique Unexecuted instantiation: stats-json.c:eb32_prev_unique Unexecuted instantiation: cache.c:eb32_prev_unique Unexecuted instantiation: fcgi-app.c:eb32_prev_unique Unexecuted instantiation: flt_spoe.c:eb32_prev_unique Unexecuted instantiation: h1_htx.c:eb32_prev_unique Unexecuted instantiation: shctx.c:eb32_prev_unique |
83 | | |
84 | | /* Delete node from the tree if it was linked in. Mark the node unused. Note |
85 | | * that this function relies on a non-inlined generic function: eb_delete. |
86 | | */ |
87 | | static inline void eb32_delete(struct eb32_node *eb32) |
88 | 0 | { |
89 | 0 | eb_delete(&eb32->node); |
90 | 0 | } Unexecuted instantiation: http.c:eb32_delete Unexecuted instantiation: tools.c:eb32_delete Unexecuted instantiation: applet.c:eb32_delete Unexecuted instantiation: cfgparse.c:eb32_delete Unexecuted instantiation: channel.c:eb32_delete Unexecuted instantiation: chunk.c:eb32_delete Unexecuted instantiation: cli.c:eb32_delete Unexecuted instantiation: clock.c:eb32_delete Unexecuted instantiation: connection.c:eb32_delete Unexecuted instantiation: debug.c:eb32_delete Unexecuted instantiation: dgram.c:eb32_delete Unexecuted instantiation: dynbuf.c:eb32_delete Unexecuted instantiation: eb32tree.c:eb32_delete Unexecuted instantiation: errors.c:eb32_delete Unexecuted instantiation: fd.c:eb32_delete Unexecuted instantiation: freq_ctr.c:eb32_delete Unexecuted instantiation: frontend.c:eb32_delete Unexecuted instantiation: haproxy.c:eb32_delete Unexecuted instantiation: http_ana.c:eb32_delete Unexecuted instantiation: http_ext.c:eb32_delete Unexecuted instantiation: http_htx.c:eb32_delete Unexecuted instantiation: http_rules.c:eb32_delete Unexecuted instantiation: limits.c:eb32_delete Unexecuted instantiation: listener.c:eb32_delete Unexecuted instantiation: log.c:eb32_delete Unexecuted instantiation: mailers.c:eb32_delete Unexecuted instantiation: mworker.c:eb32_delete Unexecuted instantiation: peers.c:eb32_delete Unexecuted instantiation: pool.c:eb32_delete Unexecuted instantiation: proto_rhttp.c:eb32_delete Unexecuted instantiation: proto_sockpair.c:eb32_delete Unexecuted instantiation: protocol.c:eb32_delete Unexecuted instantiation: proxy.c:eb32_delete Unexecuted instantiation: queue.c:eb32_delete Unexecuted instantiation: regex.c:eb32_delete Unexecuted instantiation: resolvers.c:eb32_delete Unexecuted instantiation: ring.c:eb32_delete Unexecuted instantiation: sample.c:eb32_delete Unexecuted instantiation: server.c:eb32_delete Unexecuted instantiation: session.c:eb32_delete Unexecuted instantiation: signal.c:eb32_delete Unexecuted instantiation: sink.c:eb32_delete Unexecuted instantiation: sock.c:eb32_delete Unexecuted instantiation: sock_inet.c:eb32_delete Unexecuted instantiation: stats-html.c:eb32_delete Unexecuted instantiation: stats-proxy.c:eb32_delete Unexecuted instantiation: stats.c:eb32_delete Unexecuted instantiation: stconn.c:eb32_delete Unexecuted instantiation: stick_table.c:eb32_delete Unexecuted instantiation: stream.c:eb32_delete Unexecuted instantiation: systemd.c:eb32_delete Unexecuted instantiation: task.c:eb32_delete Unexecuted instantiation: tcp_rules.c:eb32_delete Unexecuted instantiation: tcpcheck.c:eb32_delete Unexecuted instantiation: thread.c:eb32_delete Unexecuted instantiation: trace.c:eb32_delete Unexecuted instantiation: vars.c:eb32_delete Unexecuted instantiation: acl.c:eb32_delete Unexecuted instantiation: action.c:eb32_delete Unexecuted instantiation: activity.c:eb32_delete Unexecuted instantiation: arg.c:eb32_delete Unexecuted instantiation: backend.c:eb32_delete Unexecuted instantiation: cfgcond.c:eb32_delete Unexecuted instantiation: cfgparse-global.c:eb32_delete Unexecuted instantiation: cfgparse-listen.c:eb32_delete Unexecuted instantiation: check.c:eb32_delete Unexecuted instantiation: compression.c:eb32_delete Unexecuted instantiation: counters.c:eb32_delete Unexecuted instantiation: dict.c:eb32_delete Unexecuted instantiation: dns.c:eb32_delete Unexecuted instantiation: dns_ring.c:eb32_delete Unexecuted instantiation: ebimtree.c:eb32_delete Unexecuted instantiation: ebistree.c:eb32_delete Unexecuted instantiation: event_hdl.c:eb32_delete Unexecuted instantiation: extcheck.c:eb32_delete Unexecuted instantiation: filters.c:eb32_delete Unexecuted instantiation: fix.c:eb32_delete Unexecuted instantiation: flt_decomp.c:eb32_delete Unexecuted instantiation: flt_http_comp.c:eb32_delete Unexecuted instantiation: guid.c:eb32_delete Unexecuted instantiation: h1.c:eb32_delete Unexecuted instantiation: haterm.c:eb32_delete Unexecuted instantiation: http_fetch.c:eb32_delete Unexecuted instantiation: lb_chash.c:eb32_delete Unexecuted instantiation: lb_fas.c:eb32_delete Unexecuted instantiation: lb_fwlc.c:eb32_delete Unexecuted instantiation: lb_fwrr.c:eb32_delete Unexecuted instantiation: lb_map.c:eb32_delete Unexecuted instantiation: mqtt.c:eb32_delete Unexecuted instantiation: mux_spop.c:eb32_delete Unexecuted instantiation: pattern.c:eb32_delete Unexecuted instantiation: payload.c:eb32_delete Unexecuted instantiation: proto_tcp.c:eb32_delete Unexecuted instantiation: stats-file.c:eb32_delete Unexecuted instantiation: stats-json.c:eb32_delete Unexecuted instantiation: cache.c:eb32_delete Unexecuted instantiation: fcgi-app.c:eb32_delete Unexecuted instantiation: flt_spoe.c:eb32_delete Unexecuted instantiation: h1_htx.c:eb32_delete Unexecuted instantiation: shctx.c:eb32_delete |
91 | | |
92 | | /* |
93 | | * The following functions are not inlined by default. They are declared |
94 | | * in eb32tree.c, which simply relies on their inline version. |
95 | | */ |
96 | | struct eb32_node *eb32_lookup(struct eb_root *root, u32 x); |
97 | | struct eb32_node *eb32i_lookup(struct eb_root *root, s32 x); |
98 | | struct eb32_node *eb32_lookup_le(struct eb_root *root, u32 x); |
99 | | struct eb32_node *eb32_lookup_ge(struct eb_root *root, u32 x); |
100 | | struct eb32_node *eb32_insert(struct eb_root *root, struct eb32_node *new); |
101 | | struct eb32_node *eb32i_insert(struct eb_root *root, struct eb32_node *new); |
102 | | |
103 | | /* |
104 | | * The following functions are less likely to be used directly, because their |
105 | | * code is larger. The non-inlined version is preferred. |
106 | | */ |
107 | | |
108 | | /* Delete node from the tree if it was linked in. Mark the node unused. */ |
109 | | static forceinline void __eb32_delete(struct eb32_node *eb32) |
110 | 0 | { |
111 | 0 | __eb_delete(&eb32->node); |
112 | 0 | } Unexecuted instantiation: http.c:__eb32_delete Unexecuted instantiation: tools.c:__eb32_delete Unexecuted instantiation: applet.c:__eb32_delete Unexecuted instantiation: cfgparse.c:__eb32_delete Unexecuted instantiation: channel.c:__eb32_delete Unexecuted instantiation: chunk.c:__eb32_delete Unexecuted instantiation: cli.c:__eb32_delete Unexecuted instantiation: clock.c:__eb32_delete Unexecuted instantiation: connection.c:__eb32_delete Unexecuted instantiation: debug.c:__eb32_delete Unexecuted instantiation: dgram.c:__eb32_delete Unexecuted instantiation: dynbuf.c:__eb32_delete Unexecuted instantiation: eb32tree.c:__eb32_delete Unexecuted instantiation: errors.c:__eb32_delete Unexecuted instantiation: fd.c:__eb32_delete Unexecuted instantiation: freq_ctr.c:__eb32_delete Unexecuted instantiation: frontend.c:__eb32_delete Unexecuted instantiation: haproxy.c:__eb32_delete Unexecuted instantiation: http_ana.c:__eb32_delete Unexecuted instantiation: http_ext.c:__eb32_delete Unexecuted instantiation: http_htx.c:__eb32_delete Unexecuted instantiation: http_rules.c:__eb32_delete Unexecuted instantiation: limits.c:__eb32_delete Unexecuted instantiation: listener.c:__eb32_delete Unexecuted instantiation: log.c:__eb32_delete Unexecuted instantiation: mailers.c:__eb32_delete Unexecuted instantiation: mworker.c:__eb32_delete Unexecuted instantiation: peers.c:__eb32_delete Unexecuted instantiation: pool.c:__eb32_delete Unexecuted instantiation: proto_rhttp.c:__eb32_delete Unexecuted instantiation: proto_sockpair.c:__eb32_delete Unexecuted instantiation: protocol.c:__eb32_delete Unexecuted instantiation: proxy.c:__eb32_delete Unexecuted instantiation: queue.c:__eb32_delete Unexecuted instantiation: regex.c:__eb32_delete Unexecuted instantiation: resolvers.c:__eb32_delete Unexecuted instantiation: ring.c:__eb32_delete Unexecuted instantiation: sample.c:__eb32_delete Unexecuted instantiation: server.c:__eb32_delete Unexecuted instantiation: session.c:__eb32_delete Unexecuted instantiation: signal.c:__eb32_delete Unexecuted instantiation: sink.c:__eb32_delete Unexecuted instantiation: sock.c:__eb32_delete Unexecuted instantiation: sock_inet.c:__eb32_delete Unexecuted instantiation: stats-html.c:__eb32_delete Unexecuted instantiation: stats-proxy.c:__eb32_delete Unexecuted instantiation: stats.c:__eb32_delete Unexecuted instantiation: stconn.c:__eb32_delete Unexecuted instantiation: stick_table.c:__eb32_delete Unexecuted instantiation: stream.c:__eb32_delete Unexecuted instantiation: systemd.c:__eb32_delete Unexecuted instantiation: task.c:__eb32_delete Unexecuted instantiation: tcp_rules.c:__eb32_delete Unexecuted instantiation: tcpcheck.c:__eb32_delete Unexecuted instantiation: thread.c:__eb32_delete Unexecuted instantiation: trace.c:__eb32_delete Unexecuted instantiation: vars.c:__eb32_delete Unexecuted instantiation: acl.c:__eb32_delete Unexecuted instantiation: action.c:__eb32_delete Unexecuted instantiation: activity.c:__eb32_delete Unexecuted instantiation: arg.c:__eb32_delete Unexecuted instantiation: backend.c:__eb32_delete Unexecuted instantiation: cfgcond.c:__eb32_delete Unexecuted instantiation: cfgparse-global.c:__eb32_delete Unexecuted instantiation: cfgparse-listen.c:__eb32_delete Unexecuted instantiation: check.c:__eb32_delete Unexecuted instantiation: compression.c:__eb32_delete Unexecuted instantiation: counters.c:__eb32_delete Unexecuted instantiation: dict.c:__eb32_delete Unexecuted instantiation: dns.c:__eb32_delete Unexecuted instantiation: dns_ring.c:__eb32_delete Unexecuted instantiation: ebimtree.c:__eb32_delete Unexecuted instantiation: ebistree.c:__eb32_delete Unexecuted instantiation: event_hdl.c:__eb32_delete Unexecuted instantiation: extcheck.c:__eb32_delete Unexecuted instantiation: filters.c:__eb32_delete Unexecuted instantiation: fix.c:__eb32_delete Unexecuted instantiation: flt_decomp.c:__eb32_delete Unexecuted instantiation: flt_http_comp.c:__eb32_delete Unexecuted instantiation: guid.c:__eb32_delete Unexecuted instantiation: h1.c:__eb32_delete Unexecuted instantiation: haterm.c:__eb32_delete Unexecuted instantiation: http_fetch.c:__eb32_delete Unexecuted instantiation: lb_chash.c:__eb32_delete Unexecuted instantiation: lb_fas.c:__eb32_delete Unexecuted instantiation: lb_fwlc.c:__eb32_delete Unexecuted instantiation: lb_fwrr.c:__eb32_delete Unexecuted instantiation: lb_map.c:__eb32_delete Unexecuted instantiation: mqtt.c:__eb32_delete Unexecuted instantiation: mux_spop.c:__eb32_delete Unexecuted instantiation: pattern.c:__eb32_delete Unexecuted instantiation: payload.c:__eb32_delete Unexecuted instantiation: proto_tcp.c:__eb32_delete Unexecuted instantiation: stats-file.c:__eb32_delete Unexecuted instantiation: stats-json.c:__eb32_delete Unexecuted instantiation: cache.c:__eb32_delete Unexecuted instantiation: fcgi-app.c:__eb32_delete Unexecuted instantiation: flt_spoe.c:__eb32_delete Unexecuted instantiation: h1_htx.c:__eb32_delete Unexecuted instantiation: shctx.c:__eb32_delete |
113 | | |
114 | | /* |
115 | | * Find the first occurrence of a key in the tree <root>. If none can be |
116 | | * found, return NULL. |
117 | | */ |
118 | | static forceinline struct eb32_node *__eb32_lookup(struct eb_root *root, u32 x) |
119 | 0 | { |
120 | 0 | struct eb32_node *node; |
121 | 0 | eb_troot_t *troot; |
122 | 0 | u32 y, z; |
123 | |
|
124 | 0 | troot = root->b[EB_LEFT]; |
125 | 0 | if (unlikely(troot == NULL)) |
126 | 0 | return NULL; |
127 | | |
128 | 0 | while (1) { |
129 | 0 | if (unlikely(eb_gettag(troot) == EB_LEAF)) { |
130 | 0 | node = container_of(eb_untag(troot, EB_LEAF), |
131 | 0 | struct eb32_node, node.branches); |
132 | 0 | if (node->key == x) |
133 | 0 | return node; |
134 | 0 | else |
135 | 0 | return NULL; |
136 | 0 | } |
137 | 0 | node = container_of(eb_untag(troot, EB_NODE), |
138 | 0 | struct eb32_node, node.branches); |
139 | |
|
140 | 0 | eb_prefetch(node->node.branches.b[0], 0); |
141 | 0 | eb_prefetch(node->node.branches.b[1], 0); |
142 | |
|
143 | 0 | y = node->key ^ x; |
144 | 0 | z = 1U << (node->node.bit & 31); |
145 | 0 | troot = (x & z) ? node->node.branches.b[1] : node->node.branches.b[0]; |
146 | |
|
147 | 0 | if (!y) { |
148 | | /* Either we found the node which holds the key, or |
149 | | * we have a dup tree. In the later case, we have to |
150 | | * walk it down left to get the first entry. |
151 | | */ |
152 | 0 | if (node->node.bit < 0) { |
153 | 0 | troot = node->node.branches.b[EB_LEFT]; |
154 | 0 | while (eb_gettag(troot) != EB_LEAF) |
155 | 0 | troot = (eb_untag(troot, EB_NODE))->b[EB_LEFT]; |
156 | 0 | node = container_of(eb_untag(troot, EB_LEAF), |
157 | 0 | struct eb32_node, node.branches); |
158 | 0 | } |
159 | 0 | return node; |
160 | 0 | } |
161 | | |
162 | 0 | if (y & -(z << 1)) |
163 | 0 | return NULL; /* no more common bits */ |
164 | 0 | } |
165 | 0 | } Unexecuted instantiation: http.c:__eb32_lookup Unexecuted instantiation: tools.c:__eb32_lookup Unexecuted instantiation: applet.c:__eb32_lookup Unexecuted instantiation: cfgparse.c:__eb32_lookup Unexecuted instantiation: channel.c:__eb32_lookup Unexecuted instantiation: chunk.c:__eb32_lookup Unexecuted instantiation: cli.c:__eb32_lookup Unexecuted instantiation: clock.c:__eb32_lookup Unexecuted instantiation: connection.c:__eb32_lookup Unexecuted instantiation: debug.c:__eb32_lookup Unexecuted instantiation: dgram.c:__eb32_lookup Unexecuted instantiation: dynbuf.c:__eb32_lookup Unexecuted instantiation: eb32tree.c:__eb32_lookup Unexecuted instantiation: errors.c:__eb32_lookup Unexecuted instantiation: fd.c:__eb32_lookup Unexecuted instantiation: freq_ctr.c:__eb32_lookup Unexecuted instantiation: frontend.c:__eb32_lookup Unexecuted instantiation: haproxy.c:__eb32_lookup Unexecuted instantiation: http_ana.c:__eb32_lookup Unexecuted instantiation: http_ext.c:__eb32_lookup Unexecuted instantiation: http_htx.c:__eb32_lookup Unexecuted instantiation: http_rules.c:__eb32_lookup Unexecuted instantiation: limits.c:__eb32_lookup Unexecuted instantiation: listener.c:__eb32_lookup Unexecuted instantiation: log.c:__eb32_lookup Unexecuted instantiation: mailers.c:__eb32_lookup Unexecuted instantiation: mworker.c:__eb32_lookup Unexecuted instantiation: peers.c:__eb32_lookup Unexecuted instantiation: pool.c:__eb32_lookup Unexecuted instantiation: proto_rhttp.c:__eb32_lookup Unexecuted instantiation: proto_sockpair.c:__eb32_lookup Unexecuted instantiation: protocol.c:__eb32_lookup Unexecuted instantiation: proxy.c:__eb32_lookup Unexecuted instantiation: queue.c:__eb32_lookup Unexecuted instantiation: regex.c:__eb32_lookup Unexecuted instantiation: resolvers.c:__eb32_lookup Unexecuted instantiation: ring.c:__eb32_lookup Unexecuted instantiation: sample.c:__eb32_lookup Unexecuted instantiation: server.c:__eb32_lookup Unexecuted instantiation: session.c:__eb32_lookup Unexecuted instantiation: signal.c:__eb32_lookup Unexecuted instantiation: sink.c:__eb32_lookup Unexecuted instantiation: sock.c:__eb32_lookup Unexecuted instantiation: sock_inet.c:__eb32_lookup Unexecuted instantiation: stats-html.c:__eb32_lookup Unexecuted instantiation: stats-proxy.c:__eb32_lookup Unexecuted instantiation: stats.c:__eb32_lookup Unexecuted instantiation: stconn.c:__eb32_lookup Unexecuted instantiation: stick_table.c:__eb32_lookup Unexecuted instantiation: stream.c:__eb32_lookup Unexecuted instantiation: systemd.c:__eb32_lookup Unexecuted instantiation: task.c:__eb32_lookup Unexecuted instantiation: tcp_rules.c:__eb32_lookup Unexecuted instantiation: tcpcheck.c:__eb32_lookup Unexecuted instantiation: thread.c:__eb32_lookup Unexecuted instantiation: trace.c:__eb32_lookup Unexecuted instantiation: vars.c:__eb32_lookup Unexecuted instantiation: acl.c:__eb32_lookup Unexecuted instantiation: action.c:__eb32_lookup Unexecuted instantiation: activity.c:__eb32_lookup Unexecuted instantiation: arg.c:__eb32_lookup Unexecuted instantiation: backend.c:__eb32_lookup Unexecuted instantiation: cfgcond.c:__eb32_lookup Unexecuted instantiation: cfgparse-global.c:__eb32_lookup Unexecuted instantiation: cfgparse-listen.c:__eb32_lookup Unexecuted instantiation: check.c:__eb32_lookup Unexecuted instantiation: compression.c:__eb32_lookup Unexecuted instantiation: counters.c:__eb32_lookup Unexecuted instantiation: dict.c:__eb32_lookup Unexecuted instantiation: dns.c:__eb32_lookup Unexecuted instantiation: dns_ring.c:__eb32_lookup Unexecuted instantiation: ebimtree.c:__eb32_lookup Unexecuted instantiation: ebistree.c:__eb32_lookup Unexecuted instantiation: event_hdl.c:__eb32_lookup Unexecuted instantiation: extcheck.c:__eb32_lookup Unexecuted instantiation: filters.c:__eb32_lookup Unexecuted instantiation: fix.c:__eb32_lookup Unexecuted instantiation: flt_decomp.c:__eb32_lookup Unexecuted instantiation: flt_http_comp.c:__eb32_lookup Unexecuted instantiation: guid.c:__eb32_lookup Unexecuted instantiation: h1.c:__eb32_lookup Unexecuted instantiation: haterm.c:__eb32_lookup Unexecuted instantiation: http_fetch.c:__eb32_lookup Unexecuted instantiation: lb_chash.c:__eb32_lookup Unexecuted instantiation: lb_fas.c:__eb32_lookup Unexecuted instantiation: lb_fwlc.c:__eb32_lookup Unexecuted instantiation: lb_fwrr.c:__eb32_lookup Unexecuted instantiation: lb_map.c:__eb32_lookup Unexecuted instantiation: mqtt.c:__eb32_lookup Unexecuted instantiation: mux_spop.c:__eb32_lookup Unexecuted instantiation: pattern.c:__eb32_lookup Unexecuted instantiation: payload.c:__eb32_lookup Unexecuted instantiation: proto_tcp.c:__eb32_lookup Unexecuted instantiation: stats-file.c:__eb32_lookup Unexecuted instantiation: stats-json.c:__eb32_lookup Unexecuted instantiation: cache.c:__eb32_lookup Unexecuted instantiation: fcgi-app.c:__eb32_lookup Unexecuted instantiation: flt_spoe.c:__eb32_lookup Unexecuted instantiation: h1_htx.c:__eb32_lookup Unexecuted instantiation: shctx.c:__eb32_lookup |
166 | | |
167 | | /* |
168 | | * Find the first occurrence of a signed key in the tree <root>. If none can |
169 | | * be found, return NULL. |
170 | | */ |
171 | | static forceinline struct eb32_node *__eb32i_lookup(struct eb_root *root, s32 x) |
172 | 0 | { |
173 | 0 | struct eb32_node *node; |
174 | 0 | eb_troot_t *troot; |
175 | 0 | u32 key = x ^ 0x80000000; |
176 | 0 | u32 y, z; |
177 | |
|
178 | 0 | troot = root->b[EB_LEFT]; |
179 | 0 | if (unlikely(troot == NULL)) |
180 | 0 | return NULL; |
181 | | |
182 | 0 | while (1) { |
183 | 0 | if (unlikely(eb_gettag(troot) == EB_LEAF)) { |
184 | 0 | node = container_of(eb_untag(troot, EB_LEAF), |
185 | 0 | struct eb32_node, node.branches); |
186 | 0 | if (node->key == (u32)x) |
187 | 0 | return node; |
188 | 0 | else |
189 | 0 | return NULL; |
190 | 0 | } |
191 | 0 | node = container_of(eb_untag(troot, EB_NODE), |
192 | 0 | struct eb32_node, node.branches); |
193 | |
|
194 | 0 | eb_prefetch(node->node.branches.b[0], 0); |
195 | 0 | eb_prefetch(node->node.branches.b[1], 0); |
196 | |
|
197 | 0 | y = node->key ^ x; |
198 | 0 | z = 1U << (node->node.bit & 31); |
199 | 0 | troot = (key & z) ? node->node.branches.b[1] : node->node.branches.b[0]; |
200 | |
|
201 | 0 | if (!y) { |
202 | | /* Either we found the node which holds the key, or |
203 | | * we have a dup tree. In the later case, we have to |
204 | | * walk it down left to get the first entry. |
205 | | */ |
206 | 0 | if (node->node.bit < 0) { |
207 | 0 | troot = node->node.branches.b[EB_LEFT]; |
208 | 0 | while (eb_gettag(troot) != EB_LEAF) |
209 | 0 | troot = (eb_untag(troot, EB_NODE))->b[EB_LEFT]; |
210 | 0 | node = container_of(eb_untag(troot, EB_LEAF), |
211 | 0 | struct eb32_node, node.branches); |
212 | 0 | } |
213 | 0 | return node; |
214 | 0 | } |
215 | | |
216 | 0 | if (y & -(z << 1)) |
217 | 0 | return NULL; /* no more common bits */ |
218 | 0 | } |
219 | 0 | } Unexecuted instantiation: http.c:__eb32i_lookup Unexecuted instantiation: tools.c:__eb32i_lookup Unexecuted instantiation: applet.c:__eb32i_lookup Unexecuted instantiation: cfgparse.c:__eb32i_lookup Unexecuted instantiation: channel.c:__eb32i_lookup Unexecuted instantiation: chunk.c:__eb32i_lookup Unexecuted instantiation: cli.c:__eb32i_lookup Unexecuted instantiation: clock.c:__eb32i_lookup Unexecuted instantiation: connection.c:__eb32i_lookup Unexecuted instantiation: debug.c:__eb32i_lookup Unexecuted instantiation: dgram.c:__eb32i_lookup Unexecuted instantiation: dynbuf.c:__eb32i_lookup Unexecuted instantiation: eb32tree.c:__eb32i_lookup Unexecuted instantiation: errors.c:__eb32i_lookup Unexecuted instantiation: fd.c:__eb32i_lookup Unexecuted instantiation: freq_ctr.c:__eb32i_lookup Unexecuted instantiation: frontend.c:__eb32i_lookup Unexecuted instantiation: haproxy.c:__eb32i_lookup Unexecuted instantiation: http_ana.c:__eb32i_lookup Unexecuted instantiation: http_ext.c:__eb32i_lookup Unexecuted instantiation: http_htx.c:__eb32i_lookup Unexecuted instantiation: http_rules.c:__eb32i_lookup Unexecuted instantiation: limits.c:__eb32i_lookup Unexecuted instantiation: listener.c:__eb32i_lookup Unexecuted instantiation: log.c:__eb32i_lookup Unexecuted instantiation: mailers.c:__eb32i_lookup Unexecuted instantiation: mworker.c:__eb32i_lookup Unexecuted instantiation: peers.c:__eb32i_lookup Unexecuted instantiation: pool.c:__eb32i_lookup Unexecuted instantiation: proto_rhttp.c:__eb32i_lookup Unexecuted instantiation: proto_sockpair.c:__eb32i_lookup Unexecuted instantiation: protocol.c:__eb32i_lookup Unexecuted instantiation: proxy.c:__eb32i_lookup Unexecuted instantiation: queue.c:__eb32i_lookup Unexecuted instantiation: regex.c:__eb32i_lookup Unexecuted instantiation: resolvers.c:__eb32i_lookup Unexecuted instantiation: ring.c:__eb32i_lookup Unexecuted instantiation: sample.c:__eb32i_lookup Unexecuted instantiation: server.c:__eb32i_lookup Unexecuted instantiation: session.c:__eb32i_lookup Unexecuted instantiation: signal.c:__eb32i_lookup Unexecuted instantiation: sink.c:__eb32i_lookup Unexecuted instantiation: sock.c:__eb32i_lookup Unexecuted instantiation: sock_inet.c:__eb32i_lookup Unexecuted instantiation: stats-html.c:__eb32i_lookup Unexecuted instantiation: stats-proxy.c:__eb32i_lookup Unexecuted instantiation: stats.c:__eb32i_lookup Unexecuted instantiation: stconn.c:__eb32i_lookup Unexecuted instantiation: stick_table.c:__eb32i_lookup Unexecuted instantiation: stream.c:__eb32i_lookup Unexecuted instantiation: systemd.c:__eb32i_lookup Unexecuted instantiation: task.c:__eb32i_lookup Unexecuted instantiation: tcp_rules.c:__eb32i_lookup Unexecuted instantiation: tcpcheck.c:__eb32i_lookup Unexecuted instantiation: thread.c:__eb32i_lookup Unexecuted instantiation: trace.c:__eb32i_lookup Unexecuted instantiation: vars.c:__eb32i_lookup Unexecuted instantiation: acl.c:__eb32i_lookup Unexecuted instantiation: action.c:__eb32i_lookup Unexecuted instantiation: activity.c:__eb32i_lookup Unexecuted instantiation: arg.c:__eb32i_lookup Unexecuted instantiation: backend.c:__eb32i_lookup Unexecuted instantiation: cfgcond.c:__eb32i_lookup Unexecuted instantiation: cfgparse-global.c:__eb32i_lookup Unexecuted instantiation: cfgparse-listen.c:__eb32i_lookup Unexecuted instantiation: check.c:__eb32i_lookup Unexecuted instantiation: compression.c:__eb32i_lookup Unexecuted instantiation: counters.c:__eb32i_lookup Unexecuted instantiation: dict.c:__eb32i_lookup Unexecuted instantiation: dns.c:__eb32i_lookup Unexecuted instantiation: dns_ring.c:__eb32i_lookup Unexecuted instantiation: ebimtree.c:__eb32i_lookup Unexecuted instantiation: ebistree.c:__eb32i_lookup Unexecuted instantiation: event_hdl.c:__eb32i_lookup Unexecuted instantiation: extcheck.c:__eb32i_lookup Unexecuted instantiation: filters.c:__eb32i_lookup Unexecuted instantiation: fix.c:__eb32i_lookup Unexecuted instantiation: flt_decomp.c:__eb32i_lookup Unexecuted instantiation: flt_http_comp.c:__eb32i_lookup Unexecuted instantiation: guid.c:__eb32i_lookup Unexecuted instantiation: h1.c:__eb32i_lookup Unexecuted instantiation: haterm.c:__eb32i_lookup Unexecuted instantiation: http_fetch.c:__eb32i_lookup Unexecuted instantiation: lb_chash.c:__eb32i_lookup Unexecuted instantiation: lb_fas.c:__eb32i_lookup Unexecuted instantiation: lb_fwlc.c:__eb32i_lookup Unexecuted instantiation: lb_fwrr.c:__eb32i_lookup Unexecuted instantiation: lb_map.c:__eb32i_lookup Unexecuted instantiation: mqtt.c:__eb32i_lookup Unexecuted instantiation: mux_spop.c:__eb32i_lookup Unexecuted instantiation: pattern.c:__eb32i_lookup Unexecuted instantiation: payload.c:__eb32i_lookup Unexecuted instantiation: proto_tcp.c:__eb32i_lookup Unexecuted instantiation: stats-file.c:__eb32i_lookup Unexecuted instantiation: stats-json.c:__eb32i_lookup Unexecuted instantiation: cache.c:__eb32i_lookup Unexecuted instantiation: fcgi-app.c:__eb32i_lookup Unexecuted instantiation: flt_spoe.c:__eb32i_lookup Unexecuted instantiation: h1_htx.c:__eb32i_lookup Unexecuted instantiation: shctx.c:__eb32i_lookup |
220 | | |
221 | | /* Insert eb32_node <new> into subtree starting at node root <root>. |
222 | | * Only new->key needs be set with the key. The eb32_node is returned. |
223 | | * If root->b[EB_RGHT]==1, the tree may only contain unique keys. |
224 | | */ |
225 | | static forceinline struct eb32_node * |
226 | 0 | __eb32_insert(struct eb_root *root, struct eb32_node *new) { |
227 | 0 | struct eb32_node *old; |
228 | 0 | unsigned int side; |
229 | 0 | eb_troot_t *troot, **up_ptr; |
230 | 0 | u32 newkey; /* caching the key saves approximately one cycle */ |
231 | 0 | eb_troot_t *root_right; |
232 | 0 | eb_troot_t *new_left, *new_rght; |
233 | 0 | eb_troot_t *new_leaf; |
234 | 0 | int old_node_bit; |
235 | |
|
236 | 0 | side = EB_LEFT; |
237 | 0 | troot = root->b[EB_LEFT]; |
238 | 0 | root_right = root->b[EB_RGHT]; |
239 | 0 | if (unlikely(troot == NULL)) { |
240 | | /* Tree is empty, insert the leaf part below the left branch */ |
241 | 0 | root->b[EB_LEFT] = eb_dotag(&new->node.branches, EB_LEAF); |
242 | 0 | new->node.leaf_p = eb_dotag(root, EB_LEFT); |
243 | 0 | new->node.node_p = NULL; /* node part unused */ |
244 | 0 | return new; |
245 | 0 | } |
246 | | |
247 | | /* The tree descent is fairly easy : |
248 | | * - first, check if we have reached a leaf node |
249 | | * - second, check if we have gone too far |
250 | | * - third, reiterate |
251 | | * Everywhere, we use <new> for the node node we are inserting, <root> |
252 | | * for the node we attach it to, and <old> for the node we are |
253 | | * displacing below <new>. <troot> will always point to the future node |
254 | | * (tagged with its type). <side> carries the side the node <new> is |
255 | | * attached to below its parent, which is also where previous node |
256 | | * was attached. <newkey> carries the key being inserted. |
257 | | */ |
258 | 0 | newkey = new->key; |
259 | |
|
260 | 0 | while (1) { |
261 | 0 | if (eb_gettag(troot) == EB_LEAF) { |
262 | | /* insert above a leaf */ |
263 | 0 | old = container_of(eb_untag(troot, EB_LEAF), |
264 | 0 | struct eb32_node, node.branches); |
265 | 0 | new->node.node_p = old->node.leaf_p; |
266 | 0 | up_ptr = &old->node.leaf_p; |
267 | 0 | break; |
268 | 0 | } |
269 | | |
270 | | /* OK we're walking down this link */ |
271 | 0 | old = container_of(eb_untag(troot, EB_NODE), |
272 | 0 | struct eb32_node, node.branches); |
273 | |
|
274 | 0 | eb_prefetch(old->node.branches.b[0], 0); |
275 | 0 | eb_prefetch(old->node.branches.b[1], 0); |
276 | |
|
277 | 0 | old_node_bit = old->node.bit; |
278 | | |
279 | | /* Stop going down when we don't have common bits anymore. We |
280 | | * also stop in front of a duplicates tree because it means we |
281 | | * have to insert above. |
282 | | */ |
283 | |
|
284 | 0 | if ((old_node_bit < 0) || /* we're above a duplicate tree, stop here */ |
285 | 0 | (((new->key ^ old->key) >> old_node_bit) >= EB_NODE_BRANCHES)) { |
286 | | /* The tree did not contain the key, so we insert <new> before the node |
287 | | * <old>, and set ->bit to designate the lowest bit position in <new> |
288 | | * which applies to ->branches.b[]. |
289 | | */ |
290 | 0 | new->node.node_p = old->node.node_p; |
291 | 0 | up_ptr = &old->node.node_p; |
292 | 0 | break; |
293 | 0 | } |
294 | | |
295 | | /* walk down */ |
296 | 0 | side = (newkey >> old_node_bit) & EB_NODE_BRANCH_MASK; |
297 | 0 | troot = side ? old->node.branches.b[1] : old->node.branches.b[0]; |
298 | 0 | root = &old->node.branches; |
299 | 0 | } |
300 | |
|
301 | 0 | new_left = eb_dotag(&new->node.branches, EB_LEFT); |
302 | 0 | new_rght = eb_dotag(&new->node.branches, EB_RGHT); |
303 | 0 | new_leaf = eb_dotag(&new->node.branches, EB_LEAF); |
304 | | |
305 | | /* We need the common higher bits between new->key and old->key. |
306 | | * What differences are there between new->key and the node here ? |
307 | | * NOTE that bit(new) is always < bit(root) because highest |
308 | | * bit of new->key and old->key are identical here (otherwise they |
309 | | * would sit on different branches). |
310 | | */ |
311 | |
|
312 | 0 | if (new->key == old->key) { |
313 | 0 | new->node.bit = -1; /* mark as new dup tree, just in case */ |
314 | |
|
315 | 0 | if (likely(eb_gettag(root_right))) { |
316 | | /* we refuse to duplicate this key if the tree is |
317 | | * tagged as containing only unique keys. |
318 | | */ |
319 | 0 | return old; |
320 | 0 | } |
321 | | |
322 | 0 | if (eb_gettag(troot) != EB_LEAF) { |
323 | | /* there was already a dup tree below */ |
324 | 0 | struct eb_node *ret; |
325 | 0 | ret = eb_insert_dup(&old->node, &new->node); |
326 | 0 | return container_of(ret, struct eb32_node, node); |
327 | 0 | } |
328 | | /* otherwise fall through */ |
329 | 0 | } |
330 | 0 | else { |
331 | | /* note that if EB_NODE_BITS > 1, we should check that it's still >= 0 */ |
332 | 0 | new->node.bit = flsnz(new->key ^ old->key) - EB_NODE_BITS; |
333 | 0 | } |
334 | | |
335 | 0 | if (new->key >= old->key) { |
336 | 0 | new->node.branches.b[EB_LEFT] = troot; |
337 | 0 | new->node.branches.b[EB_RGHT] = new_leaf; |
338 | 0 | new->node.leaf_p = new_rght; |
339 | 0 | *up_ptr = new_left; |
340 | 0 | } |
341 | 0 | else { |
342 | 0 | new->node.branches.b[EB_LEFT] = new_leaf; |
343 | 0 | new->node.branches.b[EB_RGHT] = troot; |
344 | 0 | new->node.leaf_p = new_left; |
345 | 0 | *up_ptr = new_rght; |
346 | 0 | } |
347 | | |
348 | | /* Ok, now we are inserting <new> between <root> and <old>. <old>'s |
349 | | * parent is already set to <new>, and the <root>'s branch is still in |
350 | | * <side>. Update the root's leaf till we have it. Note that we can also |
351 | | * find the side by checking the side of new->node.node_p. |
352 | | */ |
353 | |
|
354 | 0 | root->b[side] = eb_dotag(&new->node.branches, EB_NODE); |
355 | 0 | return new; |
356 | 0 | } Unexecuted instantiation: http.c:__eb32_insert Unexecuted instantiation: tools.c:__eb32_insert Unexecuted instantiation: applet.c:__eb32_insert Unexecuted instantiation: cfgparse.c:__eb32_insert Unexecuted instantiation: channel.c:__eb32_insert Unexecuted instantiation: chunk.c:__eb32_insert Unexecuted instantiation: cli.c:__eb32_insert Unexecuted instantiation: clock.c:__eb32_insert Unexecuted instantiation: connection.c:__eb32_insert Unexecuted instantiation: debug.c:__eb32_insert Unexecuted instantiation: dgram.c:__eb32_insert Unexecuted instantiation: dynbuf.c:__eb32_insert Unexecuted instantiation: eb32tree.c:__eb32_insert Unexecuted instantiation: errors.c:__eb32_insert Unexecuted instantiation: fd.c:__eb32_insert Unexecuted instantiation: freq_ctr.c:__eb32_insert Unexecuted instantiation: frontend.c:__eb32_insert Unexecuted instantiation: haproxy.c:__eb32_insert Unexecuted instantiation: http_ana.c:__eb32_insert Unexecuted instantiation: http_ext.c:__eb32_insert Unexecuted instantiation: http_htx.c:__eb32_insert Unexecuted instantiation: http_rules.c:__eb32_insert Unexecuted instantiation: limits.c:__eb32_insert Unexecuted instantiation: listener.c:__eb32_insert Unexecuted instantiation: log.c:__eb32_insert Unexecuted instantiation: mailers.c:__eb32_insert Unexecuted instantiation: mworker.c:__eb32_insert Unexecuted instantiation: peers.c:__eb32_insert Unexecuted instantiation: pool.c:__eb32_insert Unexecuted instantiation: proto_rhttp.c:__eb32_insert Unexecuted instantiation: proto_sockpair.c:__eb32_insert Unexecuted instantiation: protocol.c:__eb32_insert Unexecuted instantiation: proxy.c:__eb32_insert Unexecuted instantiation: queue.c:__eb32_insert Unexecuted instantiation: regex.c:__eb32_insert Unexecuted instantiation: resolvers.c:__eb32_insert Unexecuted instantiation: ring.c:__eb32_insert Unexecuted instantiation: sample.c:__eb32_insert Unexecuted instantiation: server.c:__eb32_insert Unexecuted instantiation: session.c:__eb32_insert Unexecuted instantiation: signal.c:__eb32_insert Unexecuted instantiation: sink.c:__eb32_insert Unexecuted instantiation: sock.c:__eb32_insert Unexecuted instantiation: sock_inet.c:__eb32_insert Unexecuted instantiation: stats-html.c:__eb32_insert Unexecuted instantiation: stats-proxy.c:__eb32_insert Unexecuted instantiation: stats.c:__eb32_insert Unexecuted instantiation: stconn.c:__eb32_insert Unexecuted instantiation: stick_table.c:__eb32_insert Unexecuted instantiation: stream.c:__eb32_insert Unexecuted instantiation: systemd.c:__eb32_insert Unexecuted instantiation: task.c:__eb32_insert Unexecuted instantiation: tcp_rules.c:__eb32_insert Unexecuted instantiation: tcpcheck.c:__eb32_insert Unexecuted instantiation: thread.c:__eb32_insert Unexecuted instantiation: trace.c:__eb32_insert Unexecuted instantiation: vars.c:__eb32_insert Unexecuted instantiation: acl.c:__eb32_insert Unexecuted instantiation: action.c:__eb32_insert Unexecuted instantiation: activity.c:__eb32_insert Unexecuted instantiation: arg.c:__eb32_insert Unexecuted instantiation: backend.c:__eb32_insert Unexecuted instantiation: cfgcond.c:__eb32_insert Unexecuted instantiation: cfgparse-global.c:__eb32_insert Unexecuted instantiation: cfgparse-listen.c:__eb32_insert Unexecuted instantiation: check.c:__eb32_insert Unexecuted instantiation: compression.c:__eb32_insert Unexecuted instantiation: counters.c:__eb32_insert Unexecuted instantiation: dict.c:__eb32_insert Unexecuted instantiation: dns.c:__eb32_insert Unexecuted instantiation: dns_ring.c:__eb32_insert Unexecuted instantiation: ebimtree.c:__eb32_insert Unexecuted instantiation: ebistree.c:__eb32_insert Unexecuted instantiation: event_hdl.c:__eb32_insert Unexecuted instantiation: extcheck.c:__eb32_insert Unexecuted instantiation: filters.c:__eb32_insert Unexecuted instantiation: fix.c:__eb32_insert Unexecuted instantiation: flt_decomp.c:__eb32_insert Unexecuted instantiation: flt_http_comp.c:__eb32_insert Unexecuted instantiation: guid.c:__eb32_insert Unexecuted instantiation: h1.c:__eb32_insert Unexecuted instantiation: haterm.c:__eb32_insert Unexecuted instantiation: http_fetch.c:__eb32_insert Unexecuted instantiation: lb_chash.c:__eb32_insert Unexecuted instantiation: lb_fas.c:__eb32_insert Unexecuted instantiation: lb_fwlc.c:__eb32_insert Unexecuted instantiation: lb_fwrr.c:__eb32_insert Unexecuted instantiation: lb_map.c:__eb32_insert Unexecuted instantiation: mqtt.c:__eb32_insert Unexecuted instantiation: mux_spop.c:__eb32_insert Unexecuted instantiation: pattern.c:__eb32_insert Unexecuted instantiation: payload.c:__eb32_insert Unexecuted instantiation: proto_tcp.c:__eb32_insert Unexecuted instantiation: stats-file.c:__eb32_insert Unexecuted instantiation: stats-json.c:__eb32_insert Unexecuted instantiation: cache.c:__eb32_insert Unexecuted instantiation: fcgi-app.c:__eb32_insert Unexecuted instantiation: flt_spoe.c:__eb32_insert Unexecuted instantiation: h1_htx.c:__eb32_insert Unexecuted instantiation: shctx.c:__eb32_insert |
357 | | |
358 | | /* Insert eb32_node <new> into subtree starting at node root <root>, using |
359 | | * signed keys. Only new->key needs be set with the key. The eb32_node |
360 | | * is returned. If root->b[EB_RGHT]==1, the tree may only contain unique keys. |
361 | | */ |
362 | | static forceinline struct eb32_node * |
363 | 0 | __eb32i_insert(struct eb_root *root, struct eb32_node *new) { |
364 | 0 | struct eb32_node *old; |
365 | 0 | unsigned int side; |
366 | 0 | eb_troot_t *troot, **up_ptr; |
367 | 0 | int newkey; /* caching the key saves approximately one cycle */ |
368 | 0 | eb_troot_t *root_right; |
369 | 0 | eb_troot_t *new_left, *new_rght; |
370 | 0 | eb_troot_t *new_leaf; |
371 | 0 | int old_node_bit; |
372 | |
|
373 | 0 | side = EB_LEFT; |
374 | 0 | troot = root->b[EB_LEFT]; |
375 | 0 | root_right = root->b[EB_RGHT]; |
376 | 0 | if (unlikely(troot == NULL)) { |
377 | | /* Tree is empty, insert the leaf part below the left branch */ |
378 | 0 | root->b[EB_LEFT] = eb_dotag(&new->node.branches, EB_LEAF); |
379 | 0 | new->node.leaf_p = eb_dotag(root, EB_LEFT); |
380 | 0 | new->node.node_p = NULL; /* node part unused */ |
381 | 0 | return new; |
382 | 0 | } |
383 | | |
384 | | /* The tree descent is fairly easy : |
385 | | * - first, check if we have reached a leaf node |
386 | | * - second, check if we have gone too far |
387 | | * - third, reiterate |
388 | | * Everywhere, we use <new> for the node node we are inserting, <root> |
389 | | * for the node we attach it to, and <old> for the node we are |
390 | | * displacing below <new>. <troot> will always point to the future node |
391 | | * (tagged with its type). <side> carries the side the node <new> is |
392 | | * attached to below its parent, which is also where previous node |
393 | | * was attached. <newkey> carries a high bit shift of the key being |
394 | | * inserted in order to have negative keys stored before positive |
395 | | * ones. |
396 | | */ |
397 | 0 | newkey = new->key + 0x80000000; |
398 | |
|
399 | 0 | while (1) { |
400 | 0 | if (eb_gettag(troot) == EB_LEAF) { |
401 | 0 | old = container_of(eb_untag(troot, EB_LEAF), |
402 | 0 | struct eb32_node, node.branches); |
403 | 0 | new->node.node_p = old->node.leaf_p; |
404 | 0 | up_ptr = &old->node.leaf_p; |
405 | 0 | break; |
406 | 0 | } |
407 | | |
408 | | /* OK we're walking down this link */ |
409 | 0 | old = container_of(eb_untag(troot, EB_NODE), |
410 | 0 | struct eb32_node, node.branches); |
411 | |
|
412 | 0 | eb_prefetch(old->node.branches.b[0], 0); |
413 | 0 | eb_prefetch(old->node.branches.b[1], 0); |
414 | |
|
415 | 0 | old_node_bit = old->node.bit; |
416 | | |
417 | | /* Stop going down when we don't have common bits anymore. We |
418 | | * also stop in front of a duplicates tree because it means we |
419 | | * have to insert above. |
420 | | */ |
421 | |
|
422 | 0 | if ((old_node_bit < 0) || /* we're above a duplicate tree, stop here */ |
423 | 0 | (((new->key ^ old->key) >> old_node_bit) >= EB_NODE_BRANCHES)) { |
424 | | /* The tree did not contain the key, so we insert <new> before the node |
425 | | * <old>, and set ->bit to designate the lowest bit position in <new> |
426 | | * which applies to ->branches.b[]. |
427 | | */ |
428 | 0 | new->node.node_p = old->node.node_p; |
429 | 0 | up_ptr = &old->node.node_p; |
430 | 0 | break; |
431 | 0 | } |
432 | | |
433 | | /* walk down */ |
434 | 0 | side = (newkey >> old_node_bit) & EB_NODE_BRANCH_MASK; |
435 | 0 | troot = side ? old->node.branches.b[1] : old->node.branches.b[0]; |
436 | 0 | root = &old->node.branches; |
437 | 0 | } |
438 | |
|
439 | 0 | new_left = eb_dotag(&new->node.branches, EB_LEFT); |
440 | 0 | new_rght = eb_dotag(&new->node.branches, EB_RGHT); |
441 | 0 | new_leaf = eb_dotag(&new->node.branches, EB_LEAF); |
442 | | |
443 | | /* We need the common higher bits between new->key and old->key. |
444 | | * What differences are there between new->key and the node here ? |
445 | | * NOTE that bit(new) is always < bit(root) because highest |
446 | | * bit of new->key and old->key are identical here (otherwise they |
447 | | * would sit on different branches). |
448 | | */ |
449 | |
|
450 | 0 | if (new->key == old->key) { |
451 | 0 | new->node.bit = -1; /* mark as new dup tree, just in case */ |
452 | |
|
453 | 0 | if (likely(eb_gettag(root_right))) { |
454 | | /* we refuse to duplicate this key if the tree is |
455 | | * tagged as containing only unique keys. |
456 | | */ |
457 | 0 | return old; |
458 | 0 | } |
459 | | |
460 | 0 | if (eb_gettag(troot) != EB_LEAF) { |
461 | | /* there was already a dup tree below */ |
462 | 0 | struct eb_node *ret; |
463 | 0 | ret = eb_insert_dup(&old->node, &new->node); |
464 | 0 | return container_of(ret, struct eb32_node, node); |
465 | 0 | } |
466 | | /* otherwise fall through */ |
467 | 0 | } |
468 | 0 | else { |
469 | | /* note that if EB_NODE_BITS > 1, we should check that it's still >= 0 */ |
470 | 0 | new->node.bit = flsnz(new->key ^ old->key) - EB_NODE_BITS; |
471 | 0 | } |
472 | | |
473 | 0 | if ((s32)new->key >= (s32)old->key) { |
474 | 0 | new->node.branches.b[EB_LEFT] = troot; |
475 | 0 | new->node.branches.b[EB_RGHT] = new_leaf; |
476 | 0 | new->node.leaf_p = new_rght; |
477 | 0 | *up_ptr = new_left; |
478 | 0 | } |
479 | 0 | else { |
480 | 0 | new->node.branches.b[EB_LEFT] = new_leaf; |
481 | 0 | new->node.branches.b[EB_RGHT] = troot; |
482 | 0 | new->node.leaf_p = new_left; |
483 | 0 | *up_ptr = new_rght; |
484 | 0 | } |
485 | | |
486 | | /* Ok, now we are inserting <new> between <root> and <old>. <old>'s |
487 | | * parent is already set to <new>, and the <root>'s branch is still in |
488 | | * <side>. Update the root's leaf till we have it. Note that we can also |
489 | | * find the side by checking the side of new->node.node_p. |
490 | | */ |
491 | |
|
492 | 0 | root->b[side] = eb_dotag(&new->node.branches, EB_NODE); |
493 | 0 | return new; |
494 | 0 | } Unexecuted instantiation: http.c:__eb32i_insert Unexecuted instantiation: tools.c:__eb32i_insert Unexecuted instantiation: applet.c:__eb32i_insert Unexecuted instantiation: cfgparse.c:__eb32i_insert Unexecuted instantiation: channel.c:__eb32i_insert Unexecuted instantiation: chunk.c:__eb32i_insert Unexecuted instantiation: cli.c:__eb32i_insert Unexecuted instantiation: clock.c:__eb32i_insert Unexecuted instantiation: connection.c:__eb32i_insert Unexecuted instantiation: debug.c:__eb32i_insert Unexecuted instantiation: dgram.c:__eb32i_insert Unexecuted instantiation: dynbuf.c:__eb32i_insert Unexecuted instantiation: eb32tree.c:__eb32i_insert Unexecuted instantiation: errors.c:__eb32i_insert Unexecuted instantiation: fd.c:__eb32i_insert Unexecuted instantiation: freq_ctr.c:__eb32i_insert Unexecuted instantiation: frontend.c:__eb32i_insert Unexecuted instantiation: haproxy.c:__eb32i_insert Unexecuted instantiation: http_ana.c:__eb32i_insert Unexecuted instantiation: http_ext.c:__eb32i_insert Unexecuted instantiation: http_htx.c:__eb32i_insert Unexecuted instantiation: http_rules.c:__eb32i_insert Unexecuted instantiation: limits.c:__eb32i_insert Unexecuted instantiation: listener.c:__eb32i_insert Unexecuted instantiation: log.c:__eb32i_insert Unexecuted instantiation: mailers.c:__eb32i_insert Unexecuted instantiation: mworker.c:__eb32i_insert Unexecuted instantiation: peers.c:__eb32i_insert Unexecuted instantiation: pool.c:__eb32i_insert Unexecuted instantiation: proto_rhttp.c:__eb32i_insert Unexecuted instantiation: proto_sockpair.c:__eb32i_insert Unexecuted instantiation: protocol.c:__eb32i_insert Unexecuted instantiation: proxy.c:__eb32i_insert Unexecuted instantiation: queue.c:__eb32i_insert Unexecuted instantiation: regex.c:__eb32i_insert Unexecuted instantiation: resolvers.c:__eb32i_insert Unexecuted instantiation: ring.c:__eb32i_insert Unexecuted instantiation: sample.c:__eb32i_insert Unexecuted instantiation: server.c:__eb32i_insert Unexecuted instantiation: session.c:__eb32i_insert Unexecuted instantiation: signal.c:__eb32i_insert Unexecuted instantiation: sink.c:__eb32i_insert Unexecuted instantiation: sock.c:__eb32i_insert Unexecuted instantiation: sock_inet.c:__eb32i_insert Unexecuted instantiation: stats-html.c:__eb32i_insert Unexecuted instantiation: stats-proxy.c:__eb32i_insert Unexecuted instantiation: stats.c:__eb32i_insert Unexecuted instantiation: stconn.c:__eb32i_insert Unexecuted instantiation: stick_table.c:__eb32i_insert Unexecuted instantiation: stream.c:__eb32i_insert Unexecuted instantiation: systemd.c:__eb32i_insert Unexecuted instantiation: task.c:__eb32i_insert Unexecuted instantiation: tcp_rules.c:__eb32i_insert Unexecuted instantiation: tcpcheck.c:__eb32i_insert Unexecuted instantiation: thread.c:__eb32i_insert Unexecuted instantiation: trace.c:__eb32i_insert Unexecuted instantiation: vars.c:__eb32i_insert Unexecuted instantiation: acl.c:__eb32i_insert Unexecuted instantiation: action.c:__eb32i_insert Unexecuted instantiation: activity.c:__eb32i_insert Unexecuted instantiation: arg.c:__eb32i_insert Unexecuted instantiation: backend.c:__eb32i_insert Unexecuted instantiation: cfgcond.c:__eb32i_insert Unexecuted instantiation: cfgparse-global.c:__eb32i_insert Unexecuted instantiation: cfgparse-listen.c:__eb32i_insert Unexecuted instantiation: check.c:__eb32i_insert Unexecuted instantiation: compression.c:__eb32i_insert Unexecuted instantiation: counters.c:__eb32i_insert Unexecuted instantiation: dict.c:__eb32i_insert Unexecuted instantiation: dns.c:__eb32i_insert Unexecuted instantiation: dns_ring.c:__eb32i_insert Unexecuted instantiation: ebimtree.c:__eb32i_insert Unexecuted instantiation: ebistree.c:__eb32i_insert Unexecuted instantiation: event_hdl.c:__eb32i_insert Unexecuted instantiation: extcheck.c:__eb32i_insert Unexecuted instantiation: filters.c:__eb32i_insert Unexecuted instantiation: fix.c:__eb32i_insert Unexecuted instantiation: flt_decomp.c:__eb32i_insert Unexecuted instantiation: flt_http_comp.c:__eb32i_insert Unexecuted instantiation: guid.c:__eb32i_insert Unexecuted instantiation: h1.c:__eb32i_insert Unexecuted instantiation: haterm.c:__eb32i_insert Unexecuted instantiation: http_fetch.c:__eb32i_insert Unexecuted instantiation: lb_chash.c:__eb32i_insert Unexecuted instantiation: lb_fas.c:__eb32i_insert Unexecuted instantiation: lb_fwlc.c:__eb32i_insert Unexecuted instantiation: lb_fwrr.c:__eb32i_insert Unexecuted instantiation: lb_map.c:__eb32i_insert Unexecuted instantiation: mqtt.c:__eb32i_insert Unexecuted instantiation: mux_spop.c:__eb32i_insert Unexecuted instantiation: pattern.c:__eb32i_insert Unexecuted instantiation: payload.c:__eb32i_insert Unexecuted instantiation: proto_tcp.c:__eb32i_insert Unexecuted instantiation: stats-file.c:__eb32i_insert Unexecuted instantiation: stats-json.c:__eb32i_insert Unexecuted instantiation: cache.c:__eb32i_insert Unexecuted instantiation: fcgi-app.c:__eb32i_insert Unexecuted instantiation: flt_spoe.c:__eb32i_insert Unexecuted instantiation: h1_htx.c:__eb32i_insert Unexecuted instantiation: shctx.c:__eb32i_insert |
495 | | |
496 | | #endif /* _EB32_TREE_H */ |