2 #include "lfds710_queue_bounded_singleproducer_singleconsumer_internal.h"
4 /***** private prototypes *****/
5 static void lfds710_queue_bss_internal_validate( struct lfds710_queue_bss_state *qbsss,
6 struct lfds710_misc_validation_info *vi,
7 enum lfds710_misc_validity *lfds710_validity );
13 /****************************************************************************/
14 void lfds710_queue_bss_query( struct lfds710_queue_bss_state *qbsss,
15 enum lfds710_queue_bss_query query_type,
19 LFDS710_PAL_ASSERT( qbsss != NULL );
20 // TRD : query_type can be any value in its range
24 case LFDS710_QUEUE_BSS_QUERY_GET_POTENTIALLY_INACCURATE_COUNT:
30 LFDS710_PAL_ASSERT( query_input == NULL );
31 LFDS710_PAL_ASSERT( query_output != NULL );
33 LFDS710_MISC_BARRIER_LOAD;
35 local_read_index = qbsss->read_index;
36 local_write_index = qbsss->write_index;
38 *(lfds710_pal_uint_t *) query_output = +( local_write_index - local_read_index );
40 if( local_read_index > local_write_index )
41 *(lfds710_pal_uint_t *) query_output = qbsss->number_elements - *(lfds710_pal_uint_t *) query_output;
45 case LFDS710_QUEUE_BSS_QUERY_VALIDATE:
46 // TRD : query_input can be NULL
47 LFDS710_PAL_ASSERT( query_output != NULL );
49 lfds710_queue_bss_internal_validate( qbsss, (struct lfds710_misc_validation_info *) query_input, (enum lfds710_misc_validity *) query_output );
60 /****************************************************************************/
61 static void lfds710_queue_bss_internal_validate( struct lfds710_queue_bss_state *qbsss,
62 struct lfds710_misc_validation_info *vi,
63 enum lfds710_misc_validity *lfds710_validity )
65 LFDS710_PAL_ASSERT( qbsss != NULL );
66 // TRD : vi can be NULL
67 LFDS710_PAL_ASSERT( lfds710_validity != NULL );
69 *lfds710_validity = LFDS710_MISC_VALIDITY_VALID;
76 lfds710_queue_bss_query( qbsss, LFDS710_QUEUE_BSS_QUERY_GET_POTENTIALLY_INACCURATE_COUNT, NULL, (void *) &number_elements );
78 if( number_elements < vi->min_elements )
79 *lfds710_validity = LFDS710_MISC_VALIDITY_INVALID_MISSING_ELEMENTS;
81 if( number_elements > vi->max_elements )
82 *lfds710_validity = LFDS710_MISC_VALIDITY_INVALID_ADDITIONAL_ELEMENTS;