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 {
1265Sigor@sysoev.ru void *elts;
130Sigor@sysoev.ru /* nelts has uint32_t type because it is used most often. */
1465Sigor@sysoev.ru uint32_t nelts;
1565Sigor@sysoev.ru uint16_t size;
1665Sigor@sysoev.ru uint16_t nalloc;
1765Sigor@sysoev.ru nxt_mp_t *mem_pool;
180Sigor@sysoev.ru } nxt_array_t;
190Sigor@sysoev.ru
200Sigor@sysoev.ru
211563Svbart@nginx.com nxt_inline void
nxt_array_init(nxt_array_t * array,nxt_mp_t * mp,size_t size)221563Svbart@nginx.com nxt_array_init(nxt_array_t *array, nxt_mp_t *mp, size_t size)
231563Svbart@nginx.com {
241563Svbart@nginx.com array->elts = nxt_pointer_to(array, sizeof(nxt_array_t));
251563Svbart@nginx.com array->size = size;
261563Svbart@nginx.com array->mem_pool = mp;
271563Svbart@nginx.com }
281563Svbart@nginx.com
2965Sigor@sysoev.ru NXT_EXPORT nxt_array_t *nxt_array_create(nxt_mp_t *mp, nxt_uint_t n,
300Sigor@sysoev.ru size_t size);
31146Smax.romanov@nginx.com NXT_EXPORT void nxt_array_destroy(nxt_array_t *array);
320Sigor@sysoev.ru NXT_EXPORT void *nxt_array_add(nxt_array_t *array);
330Sigor@sysoev.ru NXT_EXPORT void *nxt_array_zero_add(nxt_array_t *array);
340Sigor@sysoev.ru NXT_EXPORT void nxt_array_remove(nxt_array_t *array, void *elt);
351489St.nateldemoura@f5.com NXT_EXPORT nxt_array_t *nxt_array_copy(nxt_mp_t *mp, nxt_array_t *dst,
361489St.nateldemoura@f5.com nxt_array_t *src);
370Sigor@sysoev.ru
38*2084Salx.manpages@gmail.com #define nxt_array_last(array) \
3998Svbart@nginx.com nxt_pointer_to((array)->elts, (array)->size * ((array)->nelts - 1))
400Sigor@sysoev.ru
410Sigor@sysoev.ru
42*2084Salx.manpages@gmail.com #define nxt_array_reset(array) \
430Sigor@sysoev.ru (array)->nelts = 0;
440Sigor@sysoev.ru
450Sigor@sysoev.ru
46*2084Salx.manpages@gmail.com #define nxt_array_is_empty(array) \
470Sigor@sysoev.ru ((array)->nelts == 0)
480Sigor@sysoev.ru
490Sigor@sysoev.ru
500Sigor@sysoev.ru nxt_inline void *
nxt_array_remove_last(nxt_array_t * array)510Sigor@sysoev.ru nxt_array_remove_last(nxt_array_t *array)
520Sigor@sysoev.ru {
530Sigor@sysoev.ru array->nelts--;
5498Svbart@nginx.com return nxt_pointer_to(array->elts, array->size * array->nelts);
550Sigor@sysoev.ru }
560Sigor@sysoev.ru
570Sigor@sysoev.ru
580Sigor@sysoev.ru #endif /* _NXT_ARRAY_H_INCLUDED_ */
59