]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.0.1/liblfds601/src/lfds601_queue/lfds601_queue_delete.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.0.1 / liblfds601 / src / lfds601_queue / lfds601_queue_delete.c
1 #include "lfds601_queue_internal.h"\r
2 \r
3 \r
4 \r
5 \r
6 \r
7 /****************************************************************************/\r
8 void lfds601_queue_delete( struct lfds601_queue_state *qs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )\r
9 {\r
10   void\r
11     *user_data;\r
12 \r
13   assert( qs != NULL );\r
14   // TRD : user_data_delete_function can be NULL\r
15   // TRD : user_state can be NULL\r
16 \r
17   while( lfds601_queue_dequeue(qs, &user_data) )\r
18     if( user_data_delete_function != NULL )\r
19       user_data_delete_function( user_data, user_state );\r
20 \r
21   /* TRD : fully dequeuing will leave us\r
22            with a single dummy element\r
23            which both qs->enqueue and qs->dequeue point at\r
24            we push this back onto the lfds601_freelist\r
25            before we delete the lfds601_freelist\r
26   */\r
27 \r
28   lfds601_freelist_push( qs->fs, qs->enqueue[LFDS601_QUEUE_POINTER]->fe );\r
29 \r
30   lfds601_freelist_delete( qs->fs, lfds601_queue_internal_freelist_delete_function, NULL );\r
31 \r
32   lfds601_abstraction_aligned_free( qs );\r
33 \r
34   return;\r
35 }\r
36 \r
37 \r
38 \r
39 \r
40 \r
41 /****************************************************************************/\r
42 #pragma warning( disable : 4100 )\r
43 \r
44 void lfds601_queue_internal_freelist_delete_function( void *user_data, void *user_state )\r
45 {\r
46   assert( user_data != NULL );\r
47   assert( user_state == NULL );\r
48 \r
49   lfds601_abstraction_aligned_free( user_data );\r
50 \r
51   return;\r
52 }\r
53 \r
54 #pragma warning( default : 4100 )\r
55 \r