blob: e0fe6436b13fc3710327335b550724b5a7692a4b [file] [log] [blame]
Igor Sysoevd90282d2004-09-28 08:34:51 +00001
2/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00004 * Copyright (C) Nginx, Inc.
Igor Sysoevd90282d2004-09-28 08:34:51 +00005 */
6
7
Igor Sysoevb9e34412004-09-03 15:50:30 +00008#ifndef _NGX_LIST_H_INCLUDED_
9#define _NGX_LIST_H_INCLUDED_
10
11
12#include <ngx_config.h>
13#include <ngx_core.h>
14
15
16typedef struct ngx_list_part_s ngx_list_part_t;
17
18struct ngx_list_part_s {
19 void *elts;
20 ngx_uint_t nelts;
21 ngx_list_part_t *next;
22};
23
24
25typedef struct {
26 ngx_list_part_t *last;
27 ngx_list_part_t part;
28 size_t size;
29 ngx_uint_t nalloc;
30 ngx_pool_t *pool;
31} ngx_list_t;
32
33
Igor Sysoev35d52722006-10-11 12:47:11 +000034ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size);
35
36static ngx_inline ngx_int_t
37ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size)
Igor Sysoev980a9242004-09-05 19:54:02 +000038{
Igor Sysoevc1571722005-03-19 12:38:37 +000039 list->part.elts = ngx_palloc(pool, n * size);
40 if (list->part.elts == NULL) {
Igor Sysoev980a9242004-09-05 19:54:02 +000041 return NGX_ERROR;
42 }
43
44 list->part.nelts = 0;
45 list->part.next = NULL;
46 list->last = &list->part;
47 list->size = size;
48 list->nalloc = n;
49 list->pool = pool;
50
51 return NGX_OK;
52}
Igor Sysoevb9e34412004-09-03 15:50:30 +000053
54
Igor Sysoev980a9242004-09-05 19:54:02 +000055/*
56 *
57 * the iteration through the list:
58 *
59 * part = &list.part;
60 * data = part->elts;
61 *
62 * for (i = 0 ;; i++) {
63 *
64 * if (i >= part->nelts) {
65 * if (part->next == NULL) {
66 * break;
67 * }
68 *
69 * part = part->next;
70 * data = part->elts;
71 * i = 0;
72 * }
73 *
74 * ... data[i] ...
75 *
76 * }
77 */
Igor Sysoevb9e34412004-09-03 15:50:30 +000078
79
Igor Sysoevaab4d8c2004-09-06 18:45:00 +000080void *ngx_list_push(ngx_list_t *list);
Igor Sysoevb9e34412004-09-03 15:50:30 +000081
82
83#endif /* _NGX_LIST_H_INCLUDED_ */