xref: /unit/src/nxt_array.h (revision 2084)
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
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 *
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