btree-type.h (3991B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#define __BTREE_TP(pfx, type, sfx) pfx ## type ## sfx 3#define _BTREE_TP(pfx, type, sfx) __BTREE_TP(pfx, type, sfx) 4#define BTREE_TP(pfx) _BTREE_TP(pfx, BTREE_TYPE_SUFFIX,) 5#define BTREE_FN(name) BTREE_TP(btree_ ## name) 6#define BTREE_TYPE_HEAD BTREE_TP(struct btree_head) 7#define VISITOR_FN BTREE_TP(visitor) 8#define VISITOR_FN_T _BTREE_TP(visitor, BTREE_TYPE_SUFFIX, _t) 9 10BTREE_TYPE_HEAD { 11 struct btree_head h; 12}; 13 14static inline void BTREE_FN(init_mempool)(BTREE_TYPE_HEAD *head, 15 mempool_t *mempool) 16{ 17 btree_init_mempool(&head->h, mempool); 18} 19 20static inline int BTREE_FN(init)(BTREE_TYPE_HEAD *head) 21{ 22 return btree_init(&head->h); 23} 24 25static inline void BTREE_FN(destroy)(BTREE_TYPE_HEAD *head) 26{ 27 btree_destroy(&head->h); 28} 29 30static inline int BTREE_FN(merge)(BTREE_TYPE_HEAD *target, 31 BTREE_TYPE_HEAD *victim, 32 gfp_t gfp) 33{ 34 return btree_merge(&target->h, &victim->h, BTREE_TYPE_GEO, gfp); 35} 36 37#if (BITS_PER_LONG > BTREE_TYPE_BITS) 38static inline void *BTREE_FN(lookup)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key) 39{ 40 unsigned long _key = key; 41 return btree_lookup(&head->h, BTREE_TYPE_GEO, &_key); 42} 43 44static inline int BTREE_FN(insert)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key, 45 void *val, gfp_t gfp) 46{ 47 unsigned long _key = key; 48 return btree_insert(&head->h, BTREE_TYPE_GEO, &_key, val, gfp); 49} 50 51static inline int BTREE_FN(update)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key, 52 void *val) 53{ 54 unsigned long _key = key; 55 return btree_update(&head->h, BTREE_TYPE_GEO, &_key, val); 56} 57 58static inline void *BTREE_FN(remove)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key) 59{ 60 unsigned long _key = key; 61 return btree_remove(&head->h, BTREE_TYPE_GEO, &_key); 62} 63 64static inline void *BTREE_FN(last)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key) 65{ 66 unsigned long _key; 67 void *val = btree_last(&head->h, BTREE_TYPE_GEO, &_key); 68 if (val) 69 *key = _key; 70 return val; 71} 72 73static inline void *BTREE_FN(get_prev)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key) 74{ 75 unsigned long _key = *key; 76 void *val = btree_get_prev(&head->h, BTREE_TYPE_GEO, &_key); 77 if (val) 78 *key = _key; 79 return val; 80} 81#else 82static inline void *BTREE_FN(lookup)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key) 83{ 84 return btree_lookup(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key); 85} 86 87static inline int BTREE_FN(insert)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key, 88 void *val, gfp_t gfp) 89{ 90 return btree_insert(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key, 91 val, gfp); 92} 93 94static inline int BTREE_FN(update)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key, 95 void *val) 96{ 97 return btree_update(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key, val); 98} 99 100static inline void *BTREE_FN(remove)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE key) 101{ 102 return btree_remove(&head->h, BTREE_TYPE_GEO, (unsigned long *)&key); 103} 104 105static inline void *BTREE_FN(last)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key) 106{ 107 return btree_last(&head->h, BTREE_TYPE_GEO, (unsigned long *)key); 108} 109 110static inline void *BTREE_FN(get_prev)(BTREE_TYPE_HEAD *head, BTREE_KEYTYPE *key) 111{ 112 return btree_get_prev(&head->h, BTREE_TYPE_GEO, (unsigned long *)key); 113} 114#endif 115 116void VISITOR_FN(void *elem, unsigned long opaque, unsigned long *key, 117 size_t index, void *__func); 118 119typedef void (*VISITOR_FN_T)(void *elem, unsigned long opaque, 120 BTREE_KEYTYPE key, size_t index); 121 122static inline size_t BTREE_FN(visitor)(BTREE_TYPE_HEAD *head, 123 unsigned long opaque, 124 VISITOR_FN_T func2) 125{ 126 return btree_visitor(&head->h, BTREE_TYPE_GEO, opaque, 127 visitorl, func2); 128} 129 130static inline size_t BTREE_FN(grim_visitor)(BTREE_TYPE_HEAD *head, 131 unsigned long opaque, 132 VISITOR_FN_T func2) 133{ 134 return btree_grim_visitor(&head->h, BTREE_TYPE_GEO, opaque, 135 visitorl, func2); 136} 137 138#undef VISITOR_FN 139#undef VISITOR_FN_T 140#undef __BTREE_TP 141#undef _BTREE_TP 142#undef BTREE_TP 143#undef BTREE_FN 144#undef BTREE_TYPE_HEAD 145#undef BTREE_TYPE_SUFFIX 146#undef BTREE_TYPE_GEO 147#undef BTREE_KEYTYPE 148#undef BTREE_TYPE_BITS