2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 2.00 of the Zend license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.zend.com/license/2_00.txt. |
11 | If you did not receive a copy of the Zend license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@zend.com so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Andi Gutmans <andi@zend.com> |
16 | Zeev Suraski <zeev@zend.com> |
17 +----------------------------------------------------------------------+
24 typedef struct _dynamic_array
{
26 unsigned int element_size
;
28 unsigned int allocated
;
31 ZEND_API
int zend_dynamic_array_init(dynamic_array
*da
, unsigned int element_size
, unsigned int size
)
33 da
->element_size
= element_size
;
36 da
->array
= (char *) emalloc(size
*element_size
);
37 if (da
->array
== NULL
) {
43 ZEND_API
void *zend_dynamic_array_push(dynamic_array
*da
)
45 if (da
->current
== da
->allocated
) {
47 da
->array
= (char *) erealloc(da
->array
, da
->allocated
*da
->element_size
);
49 return (void *)(da
->array
+(da
->current
++)*da
->element_size
);
52 ZEND_API
void *zend_dynamic_array_pop(dynamic_array
*da
)
54 return (void *)(da
->array
+(--(da
->current
))*da
->element_size
);
58 ZEND_API
void *zend_dynamic_array_get_element(dynamic_array
*da
, unsigned int index
)
60 if (index
>= da
->current
) {
63 return (void *)(da
->array
+index
*da
->element_size
);