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 10 BTREE_TYPE_HEAD { 11 struct btree_head h; 12 }; 13 14 static inline void BTREE_FN(init_mempool)(BTREE_TYPE_HEAD *head, 15 mempool_t *mempool) 16 { 17 btree_init_mempool(&head->h, mempool); 18 } 19 20 static inline int BTREE_FN(init)(BTREE_TYPE_HEAD *head) 21 { 22 return btree_init(&head->h); 23 } 24 25 static inline void BTREE_FN(destroy)(BTREE_TYPE_HEAD *head) 26 { 27 btree_destroy(&head->h); 28 } 29 30 static 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) 38 static 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 44 static 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 51 static 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 58 static 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 64 static 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 73 static 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 82 static 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 87 static 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 94 static 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 100 static 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 105 static 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 110 static 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 116 void VISITOR_FN(void *elem, unsigned long opaque, unsigned long *key, 117 size_t index, void *__func); 118 119 typedef void (*VISITOR_FN_T)(void *elem, unsigned long opaque, 120 BTREE_KEYTYPE key, size_t index); 121 122 static 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 130 static 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 149
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.