1 /** 2 * @file lv_rb.h 3 * 4 */ 5 6 #ifndef LV_RB_H 7 #define LV_RB_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "lv_types.h" 17 #include "lv_assert.h" 18 #include "lv_types.h" 19 20 /********************* 21 * DEFINES 22 *********************/ 23 24 /********************** 25 * TYPEDEFS 26 **********************/ 27 28 typedef enum { 29 LV_RB_COLOR_RED, 30 LV_RB_COLOR_BLACK 31 } lv_rb_color_t; 32 33 typedef int8_t lv_rb_compare_res_t; 34 35 typedef lv_rb_compare_res_t (*lv_rb_compare_t)(const void * a, const void * b); 36 37 /********************** 38 * GLOBAL PROTOTYPES 39 **********************/ 40 41 bool lv_rb_init(lv_rb_t * tree, lv_rb_compare_t compare, size_t node_size); 42 lv_rb_node_t * lv_rb_insert(lv_rb_t * tree, void * key); 43 lv_rb_node_t * lv_rb_find(lv_rb_t * tree, const void * key); 44 void * lv_rb_remove_node(lv_rb_t * tree, lv_rb_node_t * node); 45 void * lv_rb_remove(lv_rb_t * tree, const void * key); 46 bool lv_rb_drop_node(lv_rb_t * tree, lv_rb_node_t * node); 47 bool lv_rb_drop(lv_rb_t * tree, const void * key); 48 lv_rb_node_t * lv_rb_minimum(lv_rb_t * node); 49 lv_rb_node_t * lv_rb_maximum(lv_rb_t * node); 50 lv_rb_node_t * lv_rb_minimum_from(lv_rb_node_t * node); 51 lv_rb_node_t * lv_rb_maximum_from(lv_rb_node_t * node); 52 void lv_rb_destroy(lv_rb_t * tree); 53 54 /************************* 55 * GLOBAL VARIABLES 56 *************************/ 57 58 /********************** 59 * MACROS 60 **********************/ 61 62 #ifdef __cplusplus 63 } /*extern "C"*/ 64 #endif 65 66 #endif /*LV_RB_H*/ 67