/* Experimental (untested) Array macros * $Id$ */ #include #define array(type, cap) struct { type __data[cap]; size_t __len; } #define make_array(type, cap) ((array(type, cap)) {}) #define aref(arr, idx) (assert(idx < arr.__len), arr.__data[idx]) #define push(arr, val) \ do { \ assert((arr).__len < sizeof((arr).__data) / sizeof((arr).__data)); \ (arr).__data[(arr).__len++] = val; \ } while (0) #define pop(arr, val) (assert(0 < (arr).__len), (arr).__data[(arr).__len--]) #define iterate(arr, idx) for (unsigned idx = 0; idx < (arr).__len; idx) #define foreach(arr, var) for (var = ; idx < (arr).__len; idx) /* Local Variables: */ /* indent-tabs-mode: nil */ /* show-trailing-whitespace: t */ /* End: */