]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/src/lfds611_freelist/lfds611_freelist_delete.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / src / lfds611_freelist / lfds611_freelist_delete.c
1 #include "lfds611_freelist_internal.h"\r
2 \r
3 \r
4 \r
5 \r
6 \r
7 /****************************************************************************/\r
8 void lfds611_freelist_delete( struct lfds611_freelist_state *fs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )\r
9 {\r
10   struct lfds611_freelist_element\r
11     *fe;\r
12 \r
13   void\r
14     *user_data;\r
15 \r
16   assert( fs != NULL );\r
17   // TRD : user_data_delete_function can be NULL\r
18   // TRD : user_state can be NULL\r
19 \r
20   // TRD : leading load barrier not required as it will be performed by the pop\r
21 \r
22   while( lfds611_freelist_pop(fs, &fe) )\r
23   {\r
24     if( user_data_delete_function != NULL )\r
25     {\r
26       lfds611_freelist_get_user_data_from_element( fe, &user_data );\r
27       user_data_delete_function( user_data, user_state );\r
28     }\r
29 \r
30     lfds611_liblfds_aligned_free( fe );\r
31   }\r
32 \r
33   lfds611_liblfds_aligned_free( fs );\r
34 \r
35   return;\r
36 }\r
37 \r