linux/include/linux/btree-128.h
<<
>>
Prefs
   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
 111