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