xref: /freebsd/contrib/jemalloc/src/extent.c (revision a4bd5210d5e680818a9319a76ebf71caef95bcd3)
1*a4bd5210SJason Evans #define	JEMALLOC_EXTENT_C_
2*a4bd5210SJason Evans #include "jemalloc/internal/jemalloc_internal.h"
3*a4bd5210SJason Evans 
4*a4bd5210SJason Evans /******************************************************************************/
5*a4bd5210SJason Evans 
6*a4bd5210SJason Evans static inline int
7*a4bd5210SJason Evans extent_szad_comp(extent_node_t *a, extent_node_t *b)
8*a4bd5210SJason Evans {
9*a4bd5210SJason Evans 	int ret;
10*a4bd5210SJason Evans 	size_t a_size = a->size;
11*a4bd5210SJason Evans 	size_t b_size = b->size;
12*a4bd5210SJason Evans 
13*a4bd5210SJason Evans 	ret = (a_size > b_size) - (a_size < b_size);
14*a4bd5210SJason Evans 	if (ret == 0) {
15*a4bd5210SJason Evans 		uintptr_t a_addr = (uintptr_t)a->addr;
16*a4bd5210SJason Evans 		uintptr_t b_addr = (uintptr_t)b->addr;
17*a4bd5210SJason Evans 
18*a4bd5210SJason Evans 		ret = (a_addr > b_addr) - (a_addr < b_addr);
19*a4bd5210SJason Evans 	}
20*a4bd5210SJason Evans 
21*a4bd5210SJason Evans 	return (ret);
22*a4bd5210SJason Evans }
23*a4bd5210SJason Evans 
24*a4bd5210SJason Evans /* Generate red-black tree functions. */
25*a4bd5210SJason Evans rb_gen(, extent_tree_szad_, extent_tree_t, extent_node_t, link_szad,
26*a4bd5210SJason Evans     extent_szad_comp)
27*a4bd5210SJason Evans 
28*a4bd5210SJason Evans static inline int
29*a4bd5210SJason Evans extent_ad_comp(extent_node_t *a, extent_node_t *b)
30*a4bd5210SJason Evans {
31*a4bd5210SJason Evans 	uintptr_t a_addr = (uintptr_t)a->addr;
32*a4bd5210SJason Evans 	uintptr_t b_addr = (uintptr_t)b->addr;
33*a4bd5210SJason Evans 
34*a4bd5210SJason Evans 	return ((a_addr > b_addr) - (a_addr < b_addr));
35*a4bd5210SJason Evans }
36*a4bd5210SJason Evans 
37*a4bd5210SJason Evans /* Generate red-black tree functions. */
38*a4bd5210SJason Evans rb_gen(, extent_tree_ad_, extent_tree_t, extent_node_t, link_ad,
39*a4bd5210SJason Evans     extent_ad_comp)
40