From: Andi Gutmans Date: Fri, 18 Feb 2000 00:14:23 +0000 (+0000) Subject: - Preliminary support for dynamic arrays. I need it on order to try out a X-Git-Tag: php-4.0b4_rc1~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=18b8440c95eceda0361ac5a7638d922f3d675981;p=php - Preliminary support for dynamic arrays. I need it on order to try out a new hash implementation. It isn't used anywhere. --- diff --git a/Zend/Makefile.am b/Zend/Makefile.am index e06d89f6d6..7a7914d0ff 100644 --- a/Zend/Makefile.am +++ b/Zend/Makefile.am @@ -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 index 0000000000..8f638c54f0 --- /dev/null +++ b/Zend/zend_dynamic_array.c @@ -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 | + | Zeev Suraski | + +----------------------------------------------------------------------+ +*/ + +#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 index 0000000000..cd9c291806 --- /dev/null +++ b/Zend/zend_dynamic_array.h @@ -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 | + | Zeev Suraski | + +----------------------------------------------------------------------+ +*/ + + +#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 */