1 /**
2  * @file lv_vg_lite_pending.c
3  *
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 
10 #include "lv_vg_lite_pending.h"
11 
12 #if LV_USE_DRAW_VG_LITE
13 
14 /*********************
15  *      DEFINES
16  *********************/
17 
18 /**********************
19  *      TYPEDEFS
20  **********************/
21 
22 struct _lv_vg_lite_pending_t {
23     lv_array_t objs;
24     lv_vg_lite_pending_free_cb_t free_cb;
25     void * user_data;
26 };
27 
28 /**********************
29  *  STATIC PROTOTYPES
30  **********************/
31 
32 /**********************
33  *  STATIC VARIABLES
34  **********************/
35 
36 /**********************
37  *      MACROS
38  **********************/
39 
40 /**********************
41  *   GLOBAL FUNCTIONS
42  **********************/
43 
lv_vg_lite_pending_create(size_t obj_size,uint32_t capacity_default)44 lv_vg_lite_pending_t * lv_vg_lite_pending_create(size_t obj_size, uint32_t capacity_default)
45 {
46     lv_vg_lite_pending_t * pending = lv_malloc_zeroed(sizeof(lv_vg_lite_pending_t));
47     LV_ASSERT_MALLOC(pending);
48     lv_array_init(&pending->objs, capacity_default, obj_size);
49     return pending;
50 }
51 
lv_vg_lite_pending_destroy(lv_vg_lite_pending_t * pending)52 void lv_vg_lite_pending_destroy(lv_vg_lite_pending_t * pending)
53 {
54     LV_ASSERT_NULL(pending);
55     lv_vg_lite_pending_remove_all(pending);
56     lv_array_deinit(&pending->objs);
57     lv_memzero(pending, sizeof(lv_vg_lite_pending_t));
58     lv_free(pending);
59 }
60 
lv_vg_lite_pending_set_free_cb(lv_vg_lite_pending_t * pending,lv_vg_lite_pending_free_cb_t free_cb,void * user_data)61 void lv_vg_lite_pending_set_free_cb(lv_vg_lite_pending_t * pending, lv_vg_lite_pending_free_cb_t free_cb,
62                                     void * user_data)
63 {
64     LV_ASSERT_NULL(pending);
65     LV_ASSERT_NULL(free_cb);
66     pending->free_cb = free_cb;
67     pending->user_data = user_data;
68 }
69 
lv_vg_lite_pending_add(lv_vg_lite_pending_t * pending,void * obj)70 void lv_vg_lite_pending_add(lv_vg_lite_pending_t * pending, void * obj)
71 {
72     LV_ASSERT_NULL(pending);
73     LV_ASSERT_NULL(obj);
74     lv_array_push_back(&pending->objs, obj);
75 }
76 
lv_vg_lite_pending_remove_all(lv_vg_lite_pending_t * pending)77 void lv_vg_lite_pending_remove_all(lv_vg_lite_pending_t * pending)
78 {
79     LV_ASSERT_NULL(pending);
80     LV_ASSERT_NULL(pending->free_cb);
81 
82     uint32_t size = lv_array_size(&pending->objs);
83     if(size == 0) {
84         return;
85     }
86 
87     /* remove all the pending objects */
88     for(uint32_t i = 0; i < size; i++) {
89         pending->free_cb(lv_array_at(&pending->objs, i), pending->user_data);
90     }
91 
92     lv_array_clear(&pending->objs);
93 }
94 
95 /**********************
96  *   STATIC FUNCTIONS
97  **********************/
98 
99 #endif /*LV_USE_DRAW_VG_LITE*/
100