]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/liblfds710/src/lfds710_ringbuffer/lfds710_ringbuffer_read.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / liblfds710 / src / lfds710_ringbuffer / lfds710_ringbuffer_read.c
1 /***** includes *****/
2 #include "lfds710_ringbuffer_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 int lfds710_ringbuffer_read( struct lfds710_ringbuffer_state *rs,
10                              void **key,
11                              void **value )
12 {
13   int
14     rv;
15
16   struct lfds710_queue_umm_element
17     *qumme;
18
19   struct lfds710_ringbuffer_element
20     *re;
21
22   LFDS710_PAL_ASSERT( rs != NULL );
23   // TRD : key can be NULL
24   // TRD : value can be NULL
25   // TRD : psts can be NULL
26
27   rv = lfds710_queue_umm_dequeue( &rs->qumms, &qumme );
28
29   if( rv == 1 )
30   {
31     re = LFDS710_QUEUE_UMM_GET_VALUE_FROM_ELEMENT( *qumme );
32     re->qumme_use = (struct lfds710_queue_umm_element *) qumme;
33     if( key != NULL )
34       *key = re->key;
35     if( value != NULL )
36       *value = re->value;
37     LFDS710_FREELIST_SET_VALUE_IN_ELEMENT( re->fe, re );
38     lfds710_freelist_push( &rs->fs, &re->fe, NULL );
39   }
40
41   return rv;
42 }
43