X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fu_vector.h;h=8edd63895a6e287c8800025128f8a1c1a839817e;hb=18cb8f23222422c7fb9764362e659d15ec0b64eb;hp=cd8a95dcbe3d9be32a1278309956e67958e1f3f1;hpb=2b895475f600b142e9ccbfb3b33009fe68b21162;p=mesa.git diff --git a/src/util/u_vector.h b/src/util/u_vector.h index cd8a95dcbe3..8edd63895a6 100644 --- a/src/util/u_vector.h +++ b/src/util/u_vector.h @@ -33,6 +33,10 @@ #include #include "util/macros.h" +#ifdef __cplusplus +extern "C" { +#endif + /* TODO - move to u_math.h - name it better etc */ static inline uint32_t u_align_u32(uint32_t v, uint32_t a) @@ -80,12 +84,19 @@ u_vector_finish(struct u_vector *queue) free(queue->data); } +#if !defined(__GNUC__) || defined(__cplusplus) +#define __builtin_types_compatible_p(t1, t2) 1 +#endif + #define u_vector_foreach(elem, queue) \ STATIC_ASSERT(__builtin_types_compatible_p(__typeof__(queue), struct u_vector *)); \ for (uint32_t __u_vector_offset = (queue)->tail; \ - elem = (void *)((char *)(queue)->data + (__u_vector_offset & ((queue)->size - 1))), __u_vector_offset < (queue)->head; \ + elem = (void *)((char *)(queue)->data + (__u_vector_offset & ((queue)->size - 1))), __u_vector_offset != (queue)->head; \ __u_vector_offset += (queue)->element_size) +#ifdef __cplusplus +} +#endif #endif