diff options
Diffstat (limited to '')
-rw-r--r-- | src/nxt_array.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/nxt_array.h b/src/nxt_array.h new file mode 100644 index 00000000..491572da --- /dev/null +++ b/src/nxt_array.h @@ -0,0 +1,51 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_ARRAY_H_INCLUDED_ +#define _NXT_ARRAY_H_INCLUDED_ + + +typedef struct { + void *elts; + /* nelts has uint32_t type because it is used most often. */ + uint32_t nelts; + uint16_t size; + uint16_t nalloc; + nxt_mem_pool_t *mem_pool; +} nxt_array_t; + + +NXT_EXPORT nxt_array_t *nxt_array_create(nxt_mem_pool_t *mp, nxt_uint_t n, + size_t size); +NXT_EXPORT void *nxt_array_add(nxt_array_t *array); +NXT_EXPORT void *nxt_array_zero_add(nxt_array_t *array); +NXT_EXPORT void nxt_array_remove(nxt_array_t *array, void *elt); + + +#define \ +nxt_array_last(array) \ + ((void *) ((char *) (array)->elts + (array)->size * ((array)->nelts - 1))) + + +#define \ +nxt_array_reset(array) \ + (array)->nelts = 0; + + +#define \ +nxt_array_is_empty(array) \ + ((array)->nelts == 0) + + +nxt_inline void * +nxt_array_remove_last(nxt_array_t *array) +{ + array->nelts--; + return (char *) array->elts + array->size * array->nelts; +} + + +#endif /* _NXT_ARRAY_H_INCLUDED_ */ |