]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.0/liblfds610/src/lfds610_ringbuffer/lfds610_ringbuffer_query.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.0 / liblfds610 / src / lfds610_ringbuffer / lfds610_ringbuffer_query.c
1 #include "lfds610_ringbuffer_internal.h"
2
3
4
5
6
7 /****************************************************************************/
8 #pragma warning( disable : 4100 )
9
10 void lfds610_ringbuffer_query( struct lfds610_ringbuffer_state *rs, enum lfds610_ringbuffer_query_type query_type, void *query_input, void *query_output )
11 {
12   assert( rs != NULL );
13   // TRD : query_type can be any value in its range
14   // TRD : query_input can be NULL
15   assert( query_output != NULL );
16
17   switch( query_type )
18   {
19     case LFDS610_RINGBUFFER_QUERY_VALIDATE:
20       // TRD : query_input can be NULL
21
22       lfds610_ringbuffer_internal_validate( rs, (struct lfds610_validation_info *) query_input, (enum lfds610_data_structure_validity *) query_output, ((enum lfds610_data_structure_validity *) query_output)+2 );
23     break;
24   }
25
26   return;
27 }
28
29 #pragma warning( default : 4100 )
30
31
32
33
34
35 /****************************************************************************/
36 void lfds610_ringbuffer_internal_validate( struct lfds610_ringbuffer_state *rs, struct lfds610_validation_info *vi, enum lfds610_data_structure_validity *lfds610_queue_validity, enum lfds610_data_structure_validity *lfds610_freelist_validity )
37 {
38   assert( rs != NULL );
39   // TRD : vi can be NULL
40   assert( lfds610_queue_validity != NULL );
41   assert( lfds610_freelist_validity != NULL );
42
43   lfds610_queue_query( rs->qs, LFDS610_QUEUE_QUERY_VALIDATE, vi, lfds610_queue_validity );
44
45   if( vi != NULL )
46   {
47     struct lfds610_validation_info
48       lfds610_freelist_vi;
49
50     lfds610_atom_t
51       total_elements;
52
53     lfds610_freelist_query( rs->fs, LFDS610_FREELIST_QUERY_ELEMENT_COUNT, NULL, (void *) &total_elements );
54     lfds610_freelist_vi.min_elements = total_elements - vi->max_elements;
55     lfds610_freelist_vi.max_elements = total_elements - vi->min_elements;
56     lfds610_freelist_query( rs->fs, LFDS610_FREELIST_QUERY_VALIDATE, (void *) &lfds610_freelist_vi, (void *) lfds610_freelist_validity );
57   }
58
59   if( vi == NULL )
60     lfds610_freelist_query( rs->fs, LFDS610_FREELIST_QUERY_VALIDATE, NULL, (void *) lfds610_freelist_validity );
61
62   return;
63 }
64