diff options
Diffstat (limited to 'src/nxt_vector.h')
-rw-r--r-- | src/nxt_vector.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/nxt_vector.h b/src/nxt_vector.h new file mode 100644 index 00000000..ddd3e220 --- /dev/null +++ b/src/nxt_vector.h @@ -0,0 +1,69 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_VECTOR_H_INCLUDED_ +#define _NXT_VECTOR_H_INCLUDED_ + + +typedef enum { + NXT_VECTOR_INITED = 0, + NXT_VECTOR_DESCRETE, + NXT_VECTOR_EMBEDDED, +} nxt_vector_type_t; + + +typedef struct { + void *start; + /* + * A vector can hold no more than 65536 items. + * The item size is no more than 64K. + */ + uint16_t items; + uint16_t avalaible; + uint16_t item_size; + nxt_vector_type_t type:8; +} nxt_vector_t; + + +NXT_EXPORT nxt_vector_t *nxt_vector_create(nxt_uint_t items, size_t item_size, + const nxt_mem_proto_t *proto, void *pool); +NXT_EXPORT void *nxt_vector_init(nxt_vector_t *vector, nxt_uint_t items, + size_t item_size, const nxt_mem_proto_t *proto, void *pool); +NXT_EXPORT void nxt_vector_destroy(nxt_vector_t *vector, + const nxt_mem_proto_t *proto, void *pool); +NXT_EXPORT void *nxt_vector_add(nxt_vector_t *vector, + const nxt_mem_proto_t *proto, void *pool); +NXT_EXPORT void *nxt_vector_zero_add(nxt_vector_t *vector, + const nxt_mem_proto_t *proto, void *pool); +NXT_EXPORT void nxt_vector_remove(nxt_vector_t *vector, void *item); + + +#define \ +nxt_vector_last(vector) \ + ((void *) \ + ((char *) (vector)->start \ + + (vector)->item_size * ((vector)->items - 1))) + + +#define \ +nxt_vector_reset(vector) \ + (vector)->items = 0; + + +#define \ +nxt_vector_is_empty(vector) \ + ((vector)->items == 0) + + +nxt_inline void * +nxt_vector_remove_last(nxt_vector_t *vector) +{ + vector->items--; + return (char *) vector->start + vector->item_size * vector->items; +} + + +#endif /* _NXT_VECTOR_H_INCLUDED_ */ |