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