99
1010#define FF_LIST_DEFAULT_ALLOC 16
1111
12- typedef struct FFlist
13- {
12+ typedef struct FFlist {
1413 uint8_t * data ;
1514 uint32_t elementSize ;
1615 uint32_t length ;
@@ -24,121 +23,110 @@ bool ffListShift(FFlist* list, void* result);
2423// Removes the last element, and copy its value to `*result`
2524bool ffListPop (FFlist * list , void * result );
2625
27- static inline void ffListInit (FFlist * list , uint32_t elementSize )
28- {
26+ static inline void ffListInit (FFlist * list , uint32_t elementSize ) {
2927 assert (elementSize > 0 );
3028 list -> elementSize = elementSize ;
3129 list -> capacity = 0 ;
3230 list -> length = 0 ;
3331 list -> data = NULL ;
3432}
3533
36- static inline void ffListInitA (FFlist * list , uint32_t elementSize , uint32_t capacity )
37- {
34+ static inline void ffListInitA (FFlist * list , uint32_t elementSize , uint32_t capacity ) {
3835 ffListInit (list , elementSize );
3936 list -> capacity = capacity ;
40- list -> data = __builtin_expect (capacity == 0 , 0 ) ? NULL : (uint8_t * ) malloc ((size_t )list -> capacity * list -> elementSize );
37+ list -> data = __builtin_expect (capacity == 0 , 0 ) ? NULL : (uint8_t * ) malloc ((size_t ) list -> capacity * list -> elementSize );
4138}
4239
43- static inline FFlist ffListCreate (uint32_t elementSize )
44- {
40+ static inline FFlist ffListCreate (uint32_t elementSize ) {
4541 FFlist result ;
4642 ffListInit (& result , elementSize );
4743 return result ;
4844}
4945
50- static inline void * ffListGet (const FFlist * list , uint32_t index )
51- {
46+ static inline void * ffListGet (const FFlist * list , uint32_t index ) {
5247 assert (list -> capacity > index );
5348 return list -> data + (index * list -> elementSize );
5449}
5550
56- FF_C_NODISCARD static inline uint32_t ffListFirstIndexComp (const FFlist * list , void * compElement , bool (* compFunc )(const void * , const void * ))
57- {
58- for (uint32_t i = 0 ; i < list -> length ; i ++ )
59- {
60- if (compFunc (ffListGet (list , i ), compElement ))
51+ FF_C_NODISCARD static inline uint32_t ffListFirstIndexComp (const FFlist * list , void * compElement , bool (* compFunc )(const void * , const void * )) {
52+ for (uint32_t i = 0 ; i < list -> length ; i ++ ) {
53+ if (compFunc (ffListGet (list , i ), compElement )) {
6154 return i ;
55+ }
6256 }
6357
6458 return list -> length ;
6559}
6660
67- static inline bool ffListContains (const FFlist * list , void * compElement , bool (* compFunc )(const void * , const void * ))
68- {
61+ static inline bool ffListContains (const FFlist * list , void * compElement , bool (* compFunc )(const void * , const void * )) {
6962 return ffListFirstIndexComp (list , compElement , compFunc ) != list -> length ;
7063}
7164
72- static inline void ffListSort (FFlist * list , int (* compar )(const void * , const void * ))
73- {
65+ static inline void ffListSort (FFlist * list , int (* compar )(const void * , const void * )) {
7466 qsort (list -> data , list -> length , list -> elementSize , compar );
7567}
7668
7769// Move the contents of `src` into `list`, and left `src` empty
78- static inline void ffListInitMove (FFlist * list , FFlist * src )
79- {
80- if (src )
81- {
70+ static inline void ffListInitMove (FFlist * list , FFlist * src ) {
71+ if (src ) {
8272 list -> elementSize = src -> elementSize ;
8373 list -> capacity = src -> capacity ;
8474 list -> length = src -> length ;
8575 list -> data = src -> data ;
8676 ffListInit (src , list -> elementSize );
87- }
88- else
89- {
77+ } else {
9078 ffListInit (list , 0 );
9179 }
9280}
9381
94- static inline void ffListDestroy (FFlist * list )
95- {
96- if (!list -> data ) return ;
82+ static inline void ffListDestroy (FFlist * list ) {
83+ if (!list -> data ) {
84+ return ;
85+ }
9786
98- //Avoid free-after-use. These 3 assignments are cheap so don't remove them
87+ // Avoid free-after-use. These 3 assignments are cheap so don't remove them
9988 list -> capacity = list -> length = 0 ;
10089 free (list -> data );
10190 list -> data = NULL ;
10291}
10392
104- static inline void ffListClear (FFlist * list )
105- {
93+ static inline void ffListClear (FFlist * list ) {
10694 list -> length = 0 ;
10795}
10896
109- static inline void ffListReserve (FFlist * list , uint32_t newCapacity )
110- {
111- if (__builtin_expect (newCapacity <= list -> capacity , false))
97+ static inline void ffListReserve (FFlist * list , uint32_t newCapacity ) {
98+ if (__builtin_expect (newCapacity <= list -> capacity , false)) {
11299 return ;
100+ }
113101
114102 list -> data = (uint8_t * ) realloc (list -> data , (size_t ) newCapacity * list -> elementSize );
115103 list -> capacity = newCapacity ;
116104}
117105
118- #define FF_LIST_FOR_EACH (itemType , itemVarName , listVar ) \
119- assert(sizeof(itemType) == (listVar).elementSize); \
120- for(itemType* itemVarName = (itemType*)(listVar).data; \
121- itemVarName - (itemType*)(listVar).data < (intptr_t)(listVar).length; \
106+ #define FF_LIST_FOR_EACH (itemType , itemVarName , listVar ) \
107+ assert(sizeof(itemType) == (listVar).elementSize); \
108+ for (itemType* itemVarName = (itemType*) (listVar).data; \
109+ itemVarName - (itemType*) (listVar).data < (intptr_t) (listVar).length; \
122110 ++itemVarName)
123111
124112#define FF_LIST_AUTO_DESTROY FFlist __attribute__((__cleanup__(ffListDestroy)))
125113
126- #define FF_LIST_GET (itemType , listVar , index ) \
127- ({ \
114+ #define FF_LIST_GET (itemType , listVar , index ) \
115+ ({ \
128116 assert(sizeof(itemType) == (listVar).elementSize); \
129- assert((listVar).capacity > (index)); \
130- (itemType*)(listVar).data + (index); \
117+ assert((listVar).capacity > (index)); \
118+ (itemType*) (listVar).data + (index); \
131119 })
132120
133- #define FF_LIST_ADD (itemType , listVar ) \
134- ({ \
121+ #define FF_LIST_ADD (itemType , listVar ) \
122+ ({ \
135123 assert(sizeof(itemType) == (listVar).elementSize); \
136- (itemType*) ffListAdd(&(listVar)); \
124+ (itemType*) ffListAdd(&(listVar)); \
137125 })
138126
139127#define FF_LIST_FIRST (itemType , listVar ) FF_LIST_GET(itemType, listVar, 0)
140- #define FF_LIST_LAST (itemType , listVar ) \
141- ({ \
142- assert((listVar).length > 0); \
128+ #define FF_LIST_LAST (itemType , listVar ) \
129+ ({ \
130+ assert((listVar).length > 0); \
143131 FF_LIST_GET(itemType, listVar, ((listVar).length - 1)); \
144132 })
0 commit comments