1 /**
2  * @file lv_gc.h
3  *
4  */
5 
6 #ifndef LV_GC_H
7 #define LV_GC_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 
17 #ifdef LV_CONF_INCLUDE_SIMPLE
18 #include "lv_conf.h"
19 #else
20 #include "../../lv_conf.h"
21 #endif
22 
23 #include <stdint.h>
24 #include <stdbool.h>
25 #include "lv_mem.h"
26 #include "lv_ll.h"
27 #include "../lv_draw/lv_img_cache.h"
28 
29 /*********************
30  *      DEFINES
31  *********************/
32 
33 #define LV_GC_ROOTS(prefix)                                                                                            \
34     prefix lv_ll_t _lv_task_ll;  /*Linked list to store the lv_tasks*/                                                 \
35     prefix lv_ll_t _lv_disp_ll;  /*Linked list of screens*/                                                            \
36     prefix lv_ll_t _lv_indev_ll; /*Linked list of screens*/                                                            \
37     prefix lv_ll_t _lv_drv_ll;                                                                                         \
38     prefix lv_ll_t _lv_file_ll;                                                                                        \
39     prefix lv_ll_t _lv_anim_ll;                                                                                        \
40     prefix lv_ll_t _lv_group_ll;                                                                                       \
41     prefix lv_ll_t _lv_img_defoder_ll;                                                                                 \
42     prefix lv_img_cache_entry_t * _lv_img_cache_array;                                                                 \
43     prefix void * _lv_task_act;                                                                                        \
44     prefix void * _lv_draw_buf;
45 
46 #define LV_NO_PREFIX
47 #define LV_ROOTS LV_GC_ROOTS(LV_NO_PREFIX)
48 
49 #if LV_ENABLE_GC == 1
50 #if LV_MEM_CUSTOM != 1
51 #error "GC requires CUSTOM_MEM"
52 #endif /* LV_MEM_CUSTOM */
53 #else  /* LV_ENABLE_GC */
54 #define LV_GC_ROOT(x) x
55 LV_GC_ROOTS(extern)
56 #endif /* LV_ENABLE_GC */
57 
58 /**********************
59  *      TYPEDEFS
60  **********************/
61 
62 /**********************
63  * GLOBAL PROTOTYPES
64  **********************/
65 
66 /**********************
67  *      MACROS
68  **********************/
69 
70 #ifdef __cplusplus
71 } /* extern "C" */
72 #endif
73 
74 #endif /*LV_GC_H*/
75