meson: Don't build intel shared components by default
[mesa.git] / src / util / u_dynarray.h
index ad3889a7c8019796ddffbd1d1d99a100f9d74ed0..cc316323f2884e96d68c89618f07e620ac082082 100644 (file)
 #include <stdlib.h>
 #include "ralloc.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* A zero-initialized version of this is guaranteed to represent an
  * empty array.
  *
@@ -64,6 +68,12 @@ util_dynarray_fini(struct util_dynarray *buf)
    }
 }
 
+static inline void
+util_dynarray_clear(struct util_dynarray *buf)
+{
+       buf->size = 0;
+}
+
 #define DYN_ARRAY_INITIAL_SIZE 64
 
 /* use util_dynarray_trim to reduce the allocated storage */
@@ -103,7 +113,7 @@ util_dynarray_trim(struct util_dynarray *buf)
    if (buf->size != buf->capacity) {
       if (buf->size) {
          if (buf->mem_ctx) {
-            reralloc_size(buf->mem_ctx, buf->data, buf->size);
+            buf->data = reralloc_size(buf->mem_ctx, buf->data, buf->size);
          } else {
             buf->data = realloc(buf->data, buf->size);
          }
@@ -134,5 +144,23 @@ util_dynarray_trim(struct util_dynarray *buf)
    for (type *elem = (type *)(buf)->data; \
         elem < (type *)((char *)(buf)->data + (buf)->size); elem++)
 
+#define util_dynarray_delete_unordered(buf, type, v)                    \
+   do {                                                                 \
+      unsigned num_elements = (buf)->size / sizeof(type);               \
+      unsigned i;                                                       \
+      for (i = 0; i < num_elements; i++) {                              \
+         type __v = *util_dynarray_element((buf), type, (i));           \
+         if (v == __v) {                                                \
+            memcpy(util_dynarray_element((buf), type, (i)),             \
+                   util_dynarray_pop_ptr((buf), type), sizeof(type));   \
+            break;                                                      \
+         }                                                              \
+      }                                                                 \
+   } while (0)
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* U_DYNARRAY_H */