1 #include "lfds611_ringbuffer_internal.h"
\r
7 /****************************************************************************/
\r
8 int lfds611_ringbuffer_new( struct lfds611_ringbuffer_state **rs, lfds611_atom_t number_elements, int (*user_data_init_function)(void **user_data, void *user_state), void *user_state )
\r
13 assert( rs != NULL );
\r
14 // TRD : number_elements can be any value in its range
\r
15 // TRD : user_data_init_function can be NULL
\r
16 // TRD : user_state can be NULL
\r
18 *rs = (struct lfds611_ringbuffer_state *) lfds611_liblfds_aligned_malloc( sizeof(struct lfds611_ringbuffer_state), LFDS611_ALIGN_DOUBLE_POINTER );
\r
22 lfds611_freelist_new( &(*rs)->fs, number_elements, user_data_init_function, user_state );
\r
24 if( (*rs)->fs != NULL )
\r
26 lfds611_queue_new( &(*rs)->qs, number_elements );
\r
28 if( (*rs)->qs != NULL )
\r
31 if( (*rs)->qs == NULL )
\r
33 lfds611_liblfds_aligned_free( *rs );
\r
38 if( (*rs)->fs == NULL )
\r
40 lfds611_liblfds_aligned_free( *rs );
\r
45 LFDS611_BARRIER_STORE;
\r
54 /****************************************************************************/
\r
55 #pragma warning( disable : 4100 )
\r
57 void lfds611_ringbuffer_use( struct lfds611_ringbuffer_state *rs )
\r
59 assert( rs != NULL );
\r
61 LFDS611_BARRIER_LOAD;
\r
66 #pragma warning( default : 4100 )
\r