1 #include "lfds610_ringbuffer_internal.h"
7 /****************************************************************************/
8 int lfds610_ringbuffer_new( struct lfds610_ringbuffer_state **rs, lfds610_atom_t number_elements, int (*user_data_init_function)(void **user_data, void *user_state), void *user_state )
14 // TRD : number_elements can be any value in its range
15 // TRD : user_data_init_function can be NULL
16 // TRD : user_state can be NULL
18 *rs = (struct lfds610_ringbuffer_state *) lfds610_liblfds_aligned_malloc( sizeof(struct lfds610_ringbuffer_state), LFDS610_ALIGN_DOUBLE_POINTER );
22 lfds610_freelist_new( &(*rs)->fs, number_elements, user_data_init_function, user_state );
24 if( (*rs)->fs != NULL )
26 lfds610_queue_new( &(*rs)->qs, number_elements );
28 if( (*rs)->qs != NULL )
31 if( (*rs)->qs == NULL )
33 lfds610_liblfds_aligned_free( *rs );
38 if( (*rs)->fs == NULL )
40 lfds610_liblfds_aligned_free( *rs );
45 LFDS610_BARRIER_STORE;
54 /****************************************************************************/
55 #pragma warning( disable : 4100 )
57 void lfds610_ringbuffer_use( struct lfds610_ringbuffer_state *rs )
66 #pragma warning( default : 4100 )