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