btree-128.h (2737B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2extern struct btree_geo btree_geo128; 3 4struct btree_head128 { struct btree_head h; }; 5 6static inline void btree_init_mempool128(struct btree_head128 *head, 7 mempool_t *mempool) 8{ 9 btree_init_mempool(&head->h, mempool); 10} 11 12static inline int btree_init128(struct btree_head128 *head) 13{ 14 return btree_init(&head->h); 15} 16 17static inline void btree_destroy128(struct btree_head128 *head) 18{ 19 btree_destroy(&head->h); 20} 21 22static inline void *btree_lookup128(struct btree_head128 *head, u64 k1, u64 k2) 23{ 24 u64 key[2] = {k1, k2}; 25 return btree_lookup(&head->h, &btree_geo128, (unsigned long *)&key); 26} 27 28static inline void *btree_get_prev128(struct btree_head128 *head, 29 u64 *k1, u64 *k2) 30{ 31 u64 key[2] = {*k1, *k2}; 32 void *val; 33 34 val = btree_get_prev(&head->h, &btree_geo128, 35 (unsigned long *)&key); 36 *k1 = key[0]; 37 *k2 = key[1]; 38 return val; 39} 40 41static inline int btree_insert128(struct btree_head128 *head, u64 k1, u64 k2, 42 void *val, gfp_t gfp) 43{ 44 u64 key[2] = {k1, k2}; 45 return btree_insert(&head->h, &btree_geo128, 46 (unsigned long *)&key, val, gfp); 47} 48 49static inline int btree_update128(struct btree_head128 *head, u64 k1, u64 k2, 50 void *val) 51{ 52 u64 key[2] = {k1, k2}; 53 return btree_update(&head->h, &btree_geo128, 54 (unsigned long *)&key, val); 55} 56 57static inline void *btree_remove128(struct btree_head128 *head, u64 k1, u64 k2) 58{ 59 u64 key[2] = {k1, k2}; 60 return btree_remove(&head->h, &btree_geo128, (unsigned long *)&key); 61} 62 63static inline void *btree_last128(struct btree_head128 *head, u64 *k1, u64 *k2) 64{ 65 u64 key[2]; 66 void *val; 67 68 val = btree_last(&head->h, &btree_geo128, (unsigned long *)&key[0]); 69 if (val) { 70 *k1 = key[0]; 71 *k2 = key[1]; 72 } 73 74 return val; 75} 76 77static inline int btree_merge128(struct btree_head128 *target, 78 struct btree_head128 *victim, 79 gfp_t gfp) 80{ 81 return btree_merge(&target->h, &victim->h, &btree_geo128, gfp); 82} 83 84void visitor128(void *elem, unsigned long opaque, unsigned long *__key, 85 size_t index, void *__func); 86 87typedef void (*visitor128_t)(void *elem, unsigned long opaque, 88 u64 key1, u64 key2, size_t index); 89 90static inline size_t btree_visitor128(struct btree_head128 *head, 91 unsigned long opaque, 92 visitor128_t func2) 93{ 94 return btree_visitor(&head->h, &btree_geo128, opaque, 95 visitor128, func2); 96} 97 98static inline size_t btree_grim_visitor128(struct btree_head128 *head, 99 unsigned long opaque, 100 visitor128_t func2) 101{ 102 return btree_grim_visitor(&head->h, &btree_geo128, opaque, 103 visitor128, func2); 104} 105 106#define btree_for_each_safe128(head, k1, k2, val) \ 107 for (val = btree_last128(head, &k1, &k2); \ 108 val; \ 109 val = btree_get_prev128(head, &k1, &k2)) 110