xref: /unit/src/nxt_array.h (revision 65)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_ARRAY_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_ARRAY_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru typedef struct {
12*65Sigor@sysoev.ru     void      *elts;
130Sigor@sysoev.ru     /* nelts has uint32_t type because it is used most often. */
14*65Sigor@sysoev.ru     uint32_t  nelts;
15*65Sigor@sysoev.ru     uint16_t  size;
16*65Sigor@sysoev.ru     uint16_t  nalloc;
17*65Sigor@sysoev.ru     nxt_mp_t  *mem_pool;
180Sigor@sysoev.ru } nxt_array_t;
190Sigor@sysoev.ru 
200Sigor@sysoev.ru 
21*65Sigor@sysoev.ru NXT_EXPORT nxt_array_t *nxt_array_create(nxt_mp_t *mp, nxt_uint_t n,
220Sigor@sysoev.ru     size_t size);
230Sigor@sysoev.ru NXT_EXPORT void *nxt_array_add(nxt_array_t *array);
240Sigor@sysoev.ru NXT_EXPORT void *nxt_array_zero_add(nxt_array_t *array);
250Sigor@sysoev.ru NXT_EXPORT void nxt_array_remove(nxt_array_t *array, void *elt);
260Sigor@sysoev.ru 
270Sigor@sysoev.ru 
280Sigor@sysoev.ru #define                                                                       \
290Sigor@sysoev.ru nxt_array_last(array)                                                         \
300Sigor@sysoev.ru     ((void *) ((char *) (array)->elts + (array)->size * ((array)->nelts - 1)))
310Sigor@sysoev.ru 
320Sigor@sysoev.ru 
330Sigor@sysoev.ru #define                                                                       \
340Sigor@sysoev.ru nxt_array_reset(array)                                                        \
350Sigor@sysoev.ru     (array)->nelts = 0;
360Sigor@sysoev.ru 
370Sigor@sysoev.ru 
380Sigor@sysoev.ru #define                                                                       \
390Sigor@sysoev.ru nxt_array_is_empty(array)                                                     \
400Sigor@sysoev.ru     ((array)->nelts == 0)
410Sigor@sysoev.ru 
420Sigor@sysoev.ru 
430Sigor@sysoev.ru nxt_inline void *
440Sigor@sysoev.ru nxt_array_remove_last(nxt_array_t *array)
450Sigor@sysoev.ru {
460Sigor@sysoev.ru     array->nelts--;
470Sigor@sysoev.ru     return (char *) array->elts + array->size * array->nelts;
480Sigor@sysoev.ru }
490Sigor@sysoev.ru 
500Sigor@sysoev.ru 
510Sigor@sysoev.ru #endif /* _NXT_ARRAY_H_INCLUDED_ */
52