Joern Engel | 5db53f3 | 2009-11-20 20:13:39 +0100 | [diff] [blame^] | 1 | extern struct btree_geo btree_geo128; |
| 2 | |
| 3 | struct btree_head128 { struct btree_head h; }; |
| 4 | |
| 5 | static inline void btree_init_mempool128(struct btree_head128 *head, |
| 6 | mempool_t *mempool) |
| 7 | { |
| 8 | btree_init_mempool(&head->h, mempool); |
| 9 | } |
| 10 | |
| 11 | static inline int btree_init128(struct btree_head128 *head) |
| 12 | { |
| 13 | return btree_init(&head->h); |
| 14 | } |
| 15 | |
| 16 | static inline void btree_destroy128(struct btree_head128 *head) |
| 17 | { |
| 18 | btree_destroy(&head->h); |
| 19 | } |
| 20 | |
| 21 | static 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 | |
| 27 | static 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 | |
| 40 | static 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 | |
| 48 | static 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 | |
| 56 | static 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 | |
| 62 | static 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 | |
| 76 | static 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 | |
| 83 | void visitor128(void *elem, unsigned long opaque, unsigned long *__key, |
| 84 | size_t index, void *__func); |
| 85 | |
| 86 | typedef void (*visitor128_t)(void *elem, unsigned long opaque, |
| 87 | u64 key1, u64 key2, size_t index); |
| 88 | |
| 89 | static 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 | |
| 97 | static 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 | |