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