X-Git-Url: http://git.madism.org/?a=blobdiff_plain;ds=sidebyside;f=common%2Farray.h;h=6cb7619f95aab8d5374d3db6a14a629dd23ac11f;hb=d8b00b7c6eb72ef123eeb85016649742932c38d9;hp=04a632b82ef04c2f5853f619aabb498f4fdb03bc;hpb=00bae73b4873e9c1e8d5526feecdb275f7bb756f;p=apps%2Fpfixtools.git diff --git a/common/array.h b/common/array.h index 04a632b..6cb7619 100644 --- a/common/array.h +++ b/common/array.h @@ -38,6 +38,7 @@ #include "common.h" #include "mem.h" +#include #define PRIV_ARRAY(Type) \ struct { \ @@ -47,6 +48,7 @@ } #define ARRAY(Type) \ typedef PRIV_ARRAY(Type) Type ## _array_t; \ + typedef PRIV_ARRAY(Type*) Type ## _ptr_array_t; \ \ static inline Type ## _array_t *Type ## _array_new(void) \ { \ @@ -54,6 +56,19 @@ } \ \ static inline void Type ## _array_delete(Type ## _array_t **array) \ + { \ + if (*array) { \ + array_wipe(**array); \ + p_delete(array); \ + } \ + } \ + \ + static inline Type ## _ptr_array_t *Type ## _ptr_array_new(void) \ + { \ + return p_new(Type ## _ptr_array_t, 1); \ + } \ + \ + static inline void Type ## _ptr_array_delete(Type ## _ptr_array_t **array) \ { \ if (*array) { \ array_wipe(**array); \ @@ -61,6 +76,7 @@ } \ } #define A(Type) Type ## _array_t +#define PA(Type) Type ## _ptr_array_t #define ARRAY_INIT { NULL, 0, 0 } @@ -108,6 +124,10 @@ #define array_elt(array, n) (array).data[(n)] #define array_ptr(array, n) (array).data + (n) +#define foreach(var, array) \ + for (int __Ai = 0 ; __Ai < (array).len ; ++__Ai) { \ + var = array_ptr(array, __Ai); + #define array_foreach(array, action) \ for (int __Ai = 0 ; __Ai < (array).len ; ++__Ai) { \ action(array_ptr(array, __Ai)); \ @@ -118,7 +138,13 @@ array_wipe(array); \ } while (0) +#define array_lock(array) \ + !(mlock((array).data, (array).len * sizeof(*(array).data)) != 0) +#define array_unlock(array) \ + (void)munlock((array).data, (array).len * sizeof(*(array).data)) + ARRAY(char) ARRAY(int) +ARRAY(uint32_t) #endif