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