]> granicus.if.org Git - php/commitdiff
- Preliminary support for dynamic arrays. I need it on order to try out a
authorAndi Gutmans <andi@php.net>
Fri, 18 Feb 2000 00:14:23 +0000 (00:14 +0000)
committerAndi Gutmans <andi@php.net>
Fri, 18 Feb 2000 00:14:23 +0000 (00:14 +0000)
  new hash implementation. It isn't used anywhere.

Zend/Makefile.am
Zend/zend_dynamic_array.c [new file with mode: 0644]
Zend/zend_dynamic_array.h [new file with mode: 0644]

index e06d89f6d6b570dd236a56b17159e7cac53ea0c3..7a7914d0ff57813e49af19a80e4b02bfcd89f619 100644 (file)
@@ -11,7 +11,7 @@ libZend_c_la_SOURCES=zend-scanner.c
 
 libZend_la_SOURCES=\
        zend-parser.y \
-       zend_alloc.c zend_compile.c zend_constants.c \
+       zend_alloc.c zend_compile.c zend_constants.c zend_dynamic_array.c \
        zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \
        zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
        zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
diff --git a/Zend/zend_dynamic_array.c b/Zend/zend_dynamic_array.c
new file mode 100644 (file)
index 0000000..8f638c5
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+   +----------------------------------------------------------------------+
+   | Zend Engine                                                          |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski                  |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 0.91 of the Zend license,     |
+   | that is bundled with this package in the file LICENSE, and is        | 
+   | available at through the world-wide-web at                           |
+   | http://www.zend.com/license/0_91.txt.                                |
+   | If you did not receive a copy of the Zend license and are unable to  |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@zend.com so we can mail you a copy immediately.              |
+   +----------------------------------------------------------------------+
+   | Authors: Andi Gutmans <andi@zend.com>                                |
+   |          Zeev Suraski <zeev@zend.com>                                |
+   +----------------------------------------------------------------------+
+*/
+
+#include "zend.h"
+
+typedef struct _dynamic_array {
+        char *array;
+        unsigned int element_size;
+        unsigned int current;
+        unsigned int allocated;
+} dynamic_array;
+
+ZEND_API int zend_dynamic_array_init(dynamic_array *da, unsigned int element_size, unsigned int size)
+{
+       da->element_size = element_size;
+       da->allocated = size;
+       da->current = 0;
+       da->array = (char *) emalloc(size*element_size);
+       if (da->array == NULL) {
+               return 1;
+       }
+       return 0;
+}
+
+ZEND_API void *zend_dynamic_array_push(dynamic_array *da)
+{
+       if (da->current == da->allocated) {
+               da->allocated *= 2;
+               da->array = (char *) erealloc(da->array, da->allocated*da->element_size);
+       }
+       return (da->array+(da->current++)*da->element_size);
+}
+
+ZEND_API void *zend_dynamic_array_pop(dynamic_array *da)
+{
+       return (da->array+(--(da->current))*da->element_size);
+
+}
+
+ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index)
+{
+       if (index >= da->current) {
+               return NULL;
+       }
+       return (da->array+index*da->element_size);
+}
diff --git a/Zend/zend_dynamic_array.h b/Zend/zend_dynamic_array.h
new file mode 100644 (file)
index 0000000..cd9c291
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+   +----------------------------------------------------------------------+
+   | Zend Engine                                                          |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski                  |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 0.91 of the Zend license,     |
+   | that is bundled with this package in the file LICENSE, and is        | 
+   | available at through the world-wide-web at                           |
+   | http://www.zend.com/license/0_91.txt.                                |
+   | If you did not receive a copy of the Zend license and are unable to  |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@zend.com so we can mail you a copy immediately.              |
+   +----------------------------------------------------------------------+
+   | Authors: Andi Gutmans <andi@zend.com>                                |
+   |          Zeev Suraski <zeev@zend.com>                                |
+   +----------------------------------------------------------------------+
+*/
+
+
+#ifndef _DYNAMIC_ARRAY_H
+#define _DYNAMIC_ARRAY_H
+
+typedef struct _dynamic_array {
+       char *array;
+       unsigned int element_size;
+       unsigned int last_used;
+       unsigned int allocated;
+} dynamic_array;
+
+BEGIN_EXTERN_C()
+ZEND_API int zend_dynamic_array_init(dynamic_array *da);
+ZEND_API void *zend_dynamic_array_push(dynamic_array *da);
+ZEND_API void *zend_dynamic_array_pop(dynamic_array *da);
+ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index);
+END_EXTERN_C()
+
+#endif /* _ZEND_DYNAMIC_ARRAY_H */