Just a few helpers.
[apps/pfixtools.git] / common / array.h
index 55883d2..63e66cf 100644 (file)
 #define array_ensure_capacity_delta(array, delta)                              \
     array_ensure_capacity(array, (array).len + (delta))
 #define array_ensure_exact_capacity(array, goal)                               \
-    if (array_size(array) < (goal)) {                                          \
+    if ((array).size < (goal)) {                                               \
         array_ensure_can_edit(array);                                          \
         p_allocgrow(&(array).data, (goal), &(array).size);                     \
     }
         array_wipe(array);                                                     \
     } while (0)
 
+#define array_len(array) (array).len
+#define array_size(array) (array).size
+#define array_elt_len(array) sizeof(*(array).data)
+#define array_byte_len(array) (array).len * array_elt_len(array)
+
 #define array_lock(array)                                                      \
-    ((array).locked ||                                                         \
-        (mlock((array).data, (array).len * sizeof(*(array).data)) == 0         \
+    ((array).locked                                                            \
+     || (mlock((array).data, array_byte_len(array)) == 0                       \
          && ((array).locked = true)))
 #define array_unlock(array)                                                    \
     if ((array).locked) {                                                      \
-        (void)munlock((array).data, (array).len * sizeof(*(array).data));      \
+        (void)munlock((array).data, array_byte_len(array));                    \
         (array).locked = false;                                                \
     }