util: Generalize fast integer division to be variable bit-width
[mesa.git] / src / util / u_dynarray.h
index cc316323f2884e96d68c89618f07e620ac082082..512c0efc76272a6f2747e8618a14c79a5ab335ce 100644 (file)
@@ -28,6 +28,7 @@
 #define U_DYNARRAY_H
 
 #include <stdlib.h>
+#include <string.h>
 #include "ralloc.h"
 
 #ifdef __cplusplus
@@ -101,6 +102,15 @@ util_dynarray_resize(struct util_dynarray *buf, unsigned newsize)
    return p;
 }
 
+static inline void
+util_dynarray_clone(struct util_dynarray *buf, void *mem_ctx,
+                    struct util_dynarray *from_buf)
+{
+   util_dynarray_init(buf, mem_ctx);
+   util_dynarray_resize(buf, from_buf->size);
+   memcpy(buf->data, from_buf->data, from_buf->size);
+}
+
 static inline void *
 util_dynarray_grow(struct util_dynarray *buf, int diff)
 {
@@ -139,6 +149,7 @@ util_dynarray_trim(struct util_dynarray *buf)
 #define util_dynarray_element(buf, type, idx) ((type*)(buf)->data + (idx))
 #define util_dynarray_begin(buf) ((buf)->data)
 #define util_dynarray_end(buf) ((void*)util_dynarray_element((buf), char, (buf)->size))
+#define util_dynarray_num_elements(buf, type) ((buf)->size / sizeof(type))
 
 #define util_dynarray_foreach(buf, type, elem) \
    for (type *elem = (type *)(buf)->data; \