#ifndef KVM__INTERVAL_RBTREE_H #define KVM__INTERVAL_RBTREE_H #include #include #define RB_INT_INIT(l, h) \ (struct rb_int_node){.low = l, .high = h} #define rb_int(n) rb_entry(n, struct rb_int_node, node) #define rb_int_start(n) ((n)->low) #define rb_int_end(n) ((n)->low + (n)->high - 1) struct rb_int_node { struct rb_node node; u64 low; u64 high; }; /* Return the rb_int_node interval in which 'point' is located. */ struct rb_int_node *rb_int_search_single(struct rb_root *root, u64 point); /* Return the rb_int_node in which start:len is located. */ struct rb_int_node *rb_int_search_range(struct rb_root *root, u64 low, u64 high); int rb_int_insert(struct rb_root *root, struct rb_int_node *data); static inline void rb_int_erase(struct rb_root *root, struct rb_int_node *node) { rb_erase(&node->node, root); } #endif