1
2 /*
3 * Copyright (C) Igor Sysoev
4 */
5
6
7 #ifndef _NGX_LIST_H_INCLUDED_
8 #define _NGX_LIST_H_INCLUDED_
9
10
11 #include <ngx_config.h>
12 #include <ngx_core.h>
13
14
15 typedef struct ngx_list_part_s ngx_list_part_t;
16
17 struct ngx_list_part_s {
18 void *elts;
19 ngx_uint_t nelts;
20 ngx_list_part_t *next;
21 };
22
23
24 typedef struct {
25 ngx_list_part_t *last;
26 ngx_list_part_t part;
27 size_t size;
28 ngx_uint_t nalloc;
29 ngx_pool_t *pool;
30 } ngx_list_t;
31
32
33 ngx_list_t *ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size);
34
35 static ngx_inline ngx_int_t
36 ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size)
37 {
38 list->part.elts = ngx_palloc(pool, n * size);
39 if (list->part.elts == NULL) {
40 return NGX_ERROR;
41 }
42
43 list->part.nelts = 0;
44 list->part.next = NULL;
45 list->last = &list->part;
46 list->size = size;
47 list->nalloc = n;
48 list->pool = pool;
49
50 return NGX_OK;
51 }
52
53
54 /*
55 *
56 * the iteration through the list:
57 *
58 * part = &list.part;
59 * data = part->elts;
60 *
61 * for (i = 0 ;; i++) {
62 *
63 * if (i >= part->nelts) {
64 * if (part->next == NULL) {
65 * break;
66 * }
67 *
68 * part = part->next;
69 * data = part->elts;
70 * i = 0;
71 * }
72 *
73 * ... data[i] ...
74 *
75 * }
76 */
77
78
79 void *ngx_list_push(ngx_list_t *list);
80
81
82 #endif /* _NGX_LIST_H_INCLUDED_ */
83
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.