2 #include "lfds700_queue_bounded_singleconsumer_singleproducer_internal.h"
4 /***** private prototypes *****/
5 static void lfds700_queue_bss_internal_validate( struct lfds700_queue_bss_state *qbsss, struct lfds700_misc_validation_info *vi, enum lfds700_misc_validity *lfds700_validity );
11 /****************************************************************************/
12 void lfds700_queue_bss_query( struct lfds700_queue_bss_state *qbsss, enum lfds700_queue_bss_query query_type, void *query_input, void *query_output )
14 LFDS700_PAL_ASSERT( qbsss != NULL );
15 // TRD : query_type can be any value in its range
19 case LFDS700_QUEUE_BSS_QUERY_GET_POTENTIALLY_INACCURATE_COUNT:
20 LFDS700_PAL_ASSERT( query_input == NULL );
21 LFDS700_PAL_ASSERT( query_output != NULL );
23 LFDS700_MISC_BARRIER_LOAD;
25 *(lfds700_pal_uint_t *) query_output = +( qbsss->write_index - qbsss->read_index );
26 if( qbsss->read_index > qbsss->write_index )
27 *(lfds700_pal_uint_t *) query_output = qbsss->number_elements - *(lfds700_pal_uint_t *) query_output;
30 case LFDS700_QUEUE_BSS_QUERY_VALIDATE:
31 // TRD : query_input can be NULL
32 LFDS700_PAL_ASSERT( query_output != NULL );
34 lfds700_queue_bss_internal_validate( qbsss, (struct lfds700_misc_validation_info *) query_input, (enum lfds700_misc_validity *) query_output );
45 /****************************************************************************/
46 static void lfds700_queue_bss_internal_validate( struct lfds700_queue_bss_state *qbsss, struct lfds700_misc_validation_info *vi, enum lfds700_misc_validity *lfds700_validity )
48 LFDS700_PAL_ASSERT( qbsss != NULL );
49 // TRD : vi can be NULL
50 LFDS700_PAL_ASSERT( lfds700_validity != NULL );
52 *lfds700_validity = LFDS700_MISC_VALIDITY_VALID;
59 lfds700_queue_bss_query( qbsss, LFDS700_QUEUE_BSS_QUERY_GET_POTENTIALLY_INACCURATE_COUNT, NULL, (void *) &number_elements );
61 if( number_elements < vi->min_elements )
62 *lfds700_validity = LFDS700_MISC_VALIDITY_INVALID_MISSING_ELEMENTS;
64 if( number_elements > vi->max_elements )
65 *lfds700_validity = LFDS700_MISC_VALIDITY_INVALID_ADDITIONAL_ELEMENTS;