From d29a54fc976f2dd91f05e40baf0a4b37869a88bf Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sun, 1 Feb 2009 12:57:09 -0800 Subject: Initial commit. --- dynarray.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 dynarray.h (limited to 'dynarray.h') diff --git a/dynarray.h b/dynarray.h new file mode 100644 index 0000000..9ff1289 --- /dev/null +++ b/dynarray.h @@ -0,0 +1,32 @@ + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +#define DEFINE_DYNARRAY(name, type) \ + type *name; \ + int name ## _len; \ + int name ## _size; + +#define RESIZE_DYNARRAY(name, desired_len) { \ + int orig_size = name ## _size; \ + while(name ## _size < (desired_len)) \ + name ## _size *= 2; \ + /* don't bother shrinking for now. when/if we do, we'll want to bake in \ + * some kind of hysteresis so that we don't shrink until we've been under \ + * for a while. */ \ + if(name ## _size != orig_size) \ + name = realloc(name, name ## _size * sizeof(*name)); \ + name ## _len = desired_len; \ +} + +#define INIT_DYNARRAY(name, initial_len, initial_size) \ + name ## _len = initial_len; \ + name ## _size = initial_size; \ + name = realloc(NULL, name ## _size * sizeof(*name)) + +#define FREE_DYNARRAY(name) \ + free(name); + +#define DYNARRAY_GET_TOP(name) \ + (&name[name ## _len - 1]) + -- cgit v1.2.3