Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2002-08-06 20:39:45 +0400
committerIgor Sysoev <igor@sysoev.ru>2002-08-06 20:39:45 +0400
commit6de5c2cb63f8aee4bcbec3c363a72fd8e4a4e64d (patch)
tree0e4da305f8101799b6c6aa3002cecf539c2578c0 /src/core/ngx_array.c
nginx-0.0.1-2002-08-06-20:39:45 import
The first code that uses "ngx_" prefix, the previous one used "gx_" prefix. At that point the code is not yet usable. The first draft ideas are dated back to 23.10.2001.
Diffstat (limited to 'src/core/ngx_array.c')
-rw-r--r--src/core/ngx_array.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/core/ngx_array.c b/src/core/ngx_array.c
new file mode 100644
index 000000000..08ad5887b
--- /dev/null
+++ b/src/core/ngx_array.c
@@ -0,0 +1,69 @@
+
+#include <ngx_config.h>
+
+#include <ngx_alloc.h>
+#include <ngx_array.h>
+
+ngx_array_t *ngx_create_array(ngx_pool_t *p, int n, size_t size)
+{
+ ngx_array_t *a;
+
+ a = ngx_palloc(p, sizeof(ngx_array_t));
+ if (a == NULL)
+ return NULL;
+
+ a->elts = ngx_palloc(p, n * size);
+ if (a->elts == NULL)
+ return NULL;
+
+ a->pool = p;
+ a->nelts = 0;
+ a->nalloc = n;
+ a->size = size;
+
+ return a;
+}
+
+void ngx_destroy_array(ngx_array_t *a)
+{
+ ngx_pool_t *p = a->pool;
+
+ if (a->elts + a->size * a->nalloc == p->last)
+ p->last -= a->size * a->nalloc;
+
+ if ((char *) a + sizeof(ngx_array_t) == p->last)
+ p->last = (char *) a;
+}
+
+void *ngx_push_array(ngx_array_t *a)
+{
+ void *elt;
+
+ /* array is full */
+ if (a->nelts == a->nalloc) {
+ ngx_pool_t *p = a->pool;
+
+ /* array allocation is the last in the pool */
+ if (a->elts + a->size * a->nelts == p->last
+ && (unsigned) (p->end - p->last) >= a->size)
+ {
+ p->last += a->size;
+ a->nalloc++;
+
+ /* allocate new array */
+ } else {
+ void *new = ngx_palloc(p, 2 * a->nalloc * a->size);
+ if (new == NULL)
+ return NULL;
+
+ memcpy(new, a->elts, a->nalloc * a->size);
+ a->elts = new;
+ a->nalloc *= 2;
+ }
+ }
+
+ elt = a->elts + a->size * a->nelts;
+ a->nelts++;
+
+ return elt;
+}