]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/src/lfds611_ringbuffer/lfds611_ringbuffer_new.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / src / lfds611_ringbuffer / lfds611_ringbuffer_new.c
1 #include "lfds611_ringbuffer_internal.h"\r
2 \r
3 \r
4 \r
5 \r
6 \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
9 {\r
10   int\r
11     rv = 0;\r
12 \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
17 \r
18   *rs = (struct lfds611_ringbuffer_state *) lfds611_liblfds_aligned_malloc( sizeof(struct lfds611_ringbuffer_state), LFDS611_ALIGN_DOUBLE_POINTER );\r
19 \r
20   if( *rs != NULL )\r
21   {\r
22     lfds611_freelist_new( &(*rs)->fs, number_elements, user_data_init_function, user_state );\r
23 \r
24     if( (*rs)->fs != NULL )\r
25     {\r
26       lfds611_queue_new( &(*rs)->qs, number_elements );\r
27 \r
28       if( (*rs)->qs != NULL )\r
29         rv = 1;\r
30 \r
31       if( (*rs)->qs == NULL )\r
32       {\r
33         lfds611_liblfds_aligned_free( *rs );\r
34         *rs = NULL;\r
35       }\r
36     }\r
37 \r
38     if( (*rs)->fs == NULL )\r
39     {\r
40       lfds611_liblfds_aligned_free( *rs );\r
41       *rs = NULL;\r
42     }\r
43   }\r
44 \r
45   LFDS611_BARRIER_STORE;\r
46 \r
47   return( rv );\r
48 }\r
49 \r
50 \r
51 \r
52 \r
53 \r
54 /****************************************************************************/\r
55 #pragma warning( disable : 4100 )\r
56 \r
57 void lfds611_ringbuffer_use( struct lfds611_ringbuffer_state *rs )\r
58 {\r
59   assert( rs != NULL );\r
60 \r
61   LFDS611_BARRIER_LOAD;\r
62 \r
63   return;\r
64 }\r
65 \r
66 #pragma warning( default : 4100 )\r
67 \r