| /* Copyright (c) 2010 The Regents of the University of California | 
 |  * Barret Rhoden <brho@cs.berkeley.edu> | 
 |  * See LICENSE for details. | 
 |  * | 
 |  * Struct for the BCQ.  Needs to be in its own file so glibc doesn't try to | 
 |  * include any of the atomics needed for the actual BCQ operations.  */ | 
 |  | 
 | #pragma once | 
 |  | 
 | #include <ros/common.h> | 
 |  | 
 | struct bcq_header { | 
 | 	uint32_t prod_idx;	/* next to be produced in */ | 
 | 	uint32_t cons_pub_idx;	/* last completely consumed */ | 
 | 	uint32_t cons_pvt_idx;	/* last a consumer has dibs on */ | 
 | }; | 
 |  | 
 | #define DEFINE_BCQ_TYPES(__name, __elem_t, __num_elems)                        \ | 
 |                                                                                \ | 
 | /* Wrapper, per element, with the consumption bool */                          \ | 
 | struct __name##_bcq_wrap {                                                     \ | 
 | 	__elem_t elem;                                                         \ | 
 | 	bool rdy_for_cons;	/* elem is ready for consumption */            \ | 
 | };                                                                             \ | 
 |                                                                                \ | 
 | /* The actual BC queue */                                                      \ | 
 | struct __name##_bcq {                                                          \ | 
 | 	struct bcq_header hdr;                                                 \ | 
 | 	struct __name##_bcq_wrap wraps[__num_elems];                           \ | 
 | }; |