Annotation of embedaddon/php/Zend/zend_dynamic_array.c, revision 1.1.1.2

1.1       misho       1: /*
                      2:    +----------------------------------------------------------------------+
                      3:    | Zend Engine                                                          |
                      4:    +----------------------------------------------------------------------+
                      5:    | Copyright (c) 1998-2012 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:    +----------------------------------------------------------------------+
                     18: */
                     19: 
1.1.1.2 ! misho      20: /* $Id$ */
1.1       misho      21: 
                     22: #include "zend.h"
                     23: 
                     24: typedef struct _dynamic_array {
                     25:         char *array;
                     26:         unsigned int element_size;
                     27:         unsigned int current;
                     28:         unsigned int allocated;
                     29: } dynamic_array;
                     30: 
                     31: ZEND_API int zend_dynamic_array_init(dynamic_array *da, unsigned int element_size, unsigned int size)
                     32: {
                     33:        da->element_size = element_size;
                     34:        da->allocated = size;
                     35:        da->current = 0;
                     36:        da->array = (char *) emalloc(size*element_size);
                     37:        if (da->array == NULL) {
                     38:                return 1;
                     39:        }
                     40:        return 0;
                     41: }
                     42: 
                     43: ZEND_API void *zend_dynamic_array_push(dynamic_array *da)
                     44: {
                     45:        if (da->current == da->allocated) {
                     46:                da->allocated *= 2;
                     47:                da->array = (char *) erealloc(da->array, da->allocated*da->element_size);
                     48:        }
                     49:        return (void *)(da->array+(da->current++)*da->element_size);
                     50: }
                     51: 
                     52: ZEND_API void *zend_dynamic_array_pop(dynamic_array *da)
                     53: {
                     54:        return (void *)(da->array+(--(da->current))*da->element_size);
                     55: 
                     56: }
                     57: 
                     58: ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index)
                     59: {
                     60:        if (index >= da->current) {
                     61:                return NULL;
                     62:        }
                     63:        return (void *)(da->array+index*da->element_size);
                     64: }
                     65: 
                     66: /*
                     67:  * Local variables:
                     68:  * tab-width: 4
                     69:  * c-basic-offset: 4
                     70:  * indent-tabs-mode: t
                     71:  * End:
                     72:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>