]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/src/lfds611_ringbuffer/lfds611_ringbuffer_query.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / src / lfds611_ringbuffer / lfds611_ringbuffer_query.c
1 #include "lfds611_ringbuffer_internal.h"\r
2 \r
3 \r
4 \r
5 \r
6 \r
7 /****************************************************************************/\r
8 #pragma warning( disable : 4100 )\r
9 \r
10 void lfds611_ringbuffer_query( struct lfds611_ringbuffer_state *rs, enum lfds611_ringbuffer_query_type query_type, void *query_input, void *query_output )\r
11 {\r
12   assert( rs != NULL );\r
13   // TRD : query_type can be any value in its range\r
14   // TRD : query_input can be NULL\r
15   assert( query_output != NULL );\r
16 \r
17   switch( query_type )\r
18   {\r
19     case LFDS611_RINGBUFFER_QUERY_VALIDATE:\r
20       // TRD : query_input can be NULL\r
21 \r
22       lfds611_ringbuffer_internal_validate( rs, (struct lfds611_validation_info *) query_input, (enum lfds611_data_structure_validity *) query_output, ((enum lfds611_data_structure_validity *) query_output)+2 );\r
23     break;\r
24   }\r
25 \r
26   return;\r
27 }\r
28 \r
29 #pragma warning( default : 4100 )\r
30 \r
31 \r
32 \r
33 \r
34 \r
35 /****************************************************************************/\r
36 void lfds611_ringbuffer_internal_validate( struct lfds611_ringbuffer_state *rs, struct lfds611_validation_info *vi, enum lfds611_data_structure_validity *lfds611_queue_validity, enum lfds611_data_structure_validity *lfds611_freelist_validity )\r
37 {\r
38   assert( rs != NULL );\r
39   // TRD : vi can be NULL\r
40   assert( lfds611_queue_validity != NULL );\r
41   assert( lfds611_freelist_validity != NULL );\r
42 \r
43   lfds611_queue_query( rs->qs, LFDS611_QUEUE_QUERY_VALIDATE, vi, lfds611_queue_validity );\r
44 \r
45   if( vi != NULL )\r
46   {\r
47     struct lfds611_validation_info\r
48       lfds611_freelist_vi;\r
49 \r
50     lfds611_atom_t\r
51       total_elements;\r
52 \r
53     lfds611_freelist_query( rs->fs, LFDS611_FREELIST_QUERY_ELEMENT_COUNT, NULL, (void *) &total_elements );\r
54     lfds611_freelist_vi.min_elements = total_elements - vi->max_elements;\r
55     lfds611_freelist_vi.max_elements = total_elements - vi->min_elements;\r
56     lfds611_freelist_query( rs->fs, LFDS611_FREELIST_QUERY_VALIDATE, (void *) &lfds611_freelist_vi, (void *) lfds611_freelist_validity );\r
57   }\r
58 \r
59   if( vi == NULL )\r
60     lfds611_freelist_query( rs->fs, LFDS611_FREELIST_QUERY_VALIDATE, NULL, (void *) lfds611_freelist_validity );\r
61 \r
62   return;\r
63 }\r
64 \r