colder Wed Jun 18 14:54:28 2008 UTC Added files: /php-src/ext/spl spl_fixedarray.c spl_fixedarray.h /php-src/ext/spl/tests fixedarray_001.phpt fixedarray_002.phpt fixedarray_003.phpt fixedarray_004.phpt fixedarray_005.phpt fixedarray_006.phpt fixedarray_007.phpt fixedarray_008.phpt fixedarray_009.phpt fixedarray_010.phpt fixedarray_011.phpt fixedarray_012.phpt fixedarray_013.phpt fixedarray_014.phpt fixedarray_015.phpt
Removed files: /php-src/ext/spl spl_fastarray.c spl_fastarray.h /php-src/ext/spl/tests fastarray_001.phpt fastarray_002.phpt fastarray_003.phpt fastarray_004.phpt fastarray_005.phpt fastarray_006.phpt fastarray_007.phpt fastarray_008.phpt fastarray_009.phpt fastarray_010.phpt fastarray_011.phpt fastarray_012.phpt fastarray_013.phpt fastarray_014.phpt fastarray_015.phpt Modified files: /php-src/ext/spl config.m4 config.w32 php_spl.c Log: Rename everything from SplFastArray to SplFixedArray
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/config.m4?r1=1.26&r2=1.27&diff_format=u Index: php-src/ext/spl/config.m4 diff -u php-src/ext/spl/config.m4:1.26 php-src/ext/spl/config.m4:1.27 --- php-src/ext/spl/config.m4:1.26 Fri Jun 6 23:53:10 2008 +++ php-src/ext/spl/config.m4 Wed Jun 18 14:54:27 2008 @@ -1,4 +1,4 @@ -dnl $Id: config.m4,v 1.26 2008/06/06 23:53:10 colder Exp $ +dnl $Id: config.m4,v 1.27 2008/06/18 14:54:27 colder Exp $ dnl config.m4 for extension SPL AC_MSG_CHECKING(whether zend_object_value is packed) @@ -25,6 +25,6 @@ PHP_INSTALL_HEADERS([ext/spl/]) AC_DEFINE_UNQUOTED(HAVE_PACKED_OBJECT_VALUE, $ac_result, [Whether struct _zend_object_value is packed]) AC_DEFINE(HAVE_SPL, 1, [Whether you want SPL (Standard PHP Library) support]) - PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fastarray.c, no) - PHP_INSTALL_HEADERS([ext/spl], [php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_sxe.h spl_dllist.h spl_heap.h spl_fastarray.h]) + PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c, no) + PHP_INSTALL_HEADERS([ext/spl], [php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_sxe.h spl_dllist.h spl_heap.h spl_fixedarray.h]) PHP_ADD_EXTENSION_DEP(spl, pcre, true) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/config.w32?r1=1.11&r2=1.12&diff_format=u Index: php-src/ext/spl/config.w32 diff -u php-src/ext/spl/config.w32:1.11 php-src/ext/spl/config.w32:1.12 --- php-src/ext/spl/config.w32:1.11 Fri Jun 6 23:53:10 2008 +++ php-src/ext/spl/config.w32 Wed Jun 18 14:54:27 2008 @@ -1,5 +1,5 @@ -// $Id: config.w32,v 1.11 2008/06/06 23:53:10 colder Exp $ +// $Id: config.w32,v 1.12 2008/06/18 14:54:27 colder Exp $ // vim:ft=javascript -EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fastarray.c", false /* never shared */); +EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c", false /* never shared */); AC_DEFINE('HAVE_SPL', 1); http://cvs.php.net/viewvc.cgi/php-src/ext/spl/php_spl.c?r1=1.132&r2=1.133&diff_format=u Index: php-src/ext/spl/php_spl.c diff -u php-src/ext/spl/php_spl.c:1.132 php-src/ext/spl/php_spl.c:1.133 --- php-src/ext/spl/php_spl.c:1.132 Fri Jun 6 23:53:10 2008 +++ php-src/ext/spl/php_spl.c Wed Jun 18 14:54:27 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_spl.c,v 1.132 2008/06/06 23:53:10 colder Exp $ */ +/* $Id: php_spl.c,v 1.133 2008/06/18 14:54:27 colder Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -37,7 +37,7 @@ #include "spl_observer.h" #include "spl_dllist.h" #include "spl_heap.h" -#include "spl_fastarray.h" +#include "spl_fixedarray.h" #include "zend_exceptions.h" #include "zend_interfaces.h" #include "ext/standard/md5.h" @@ -157,7 +157,7 @@ SPL_ADD_CLASS(SplMinHeap, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SplMaxHeap, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SplPriorityQueue, z_list, sub, allow, ce_flags); \ - SPL_ADD_CLASS(SplFastArray, z_list, sub, allow, ce_flags); \ + SPL_ADD_CLASS(SplFixedArray, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(BadFunctionCallException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(BadMethodCallException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(CachingIterator, z_list, sub, allow, ce_flags); \ @@ -802,7 +802,7 @@ PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_dllist)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_heap)(INIT_FUNC_ARGS_PASSTHRU); - PHP_MINIT(spl_fastarray)(INIT_FUNC_ARGS_PASSTHRU); + PHP_MINIT(spl_fixedarray)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_observer)(INIT_FUNC_ARGS_PASSTHRU); return SUCCESS; http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_fixedarray.c?view=markup&rev=1.1 Index: php-src/ext/spl/spl_fixedarray.c +++ php-src/ext/spl/spl_fixedarray.c /* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2008 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Antony Dovgal <[EMAIL PROTECTED]> | | Etienne Kneuss <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ /* $Id: spl_fixedarray.c,v 1.1 2008/06/18 14:54:27 colder Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "zend_exceptions.h" #include "php_spl.h" #include "spl_functions.h" #include "spl_engine.h" #include "spl_fixedarray.h" #include "spl_exceptions.h" #include "spl_iterators.h" zend_object_handlers spl_handler_SplFixedArray; PHPAPI zend_class_entry *spl_ce_SplFixedArray; #ifdef COMPILE_DL_SPL_FIXEDARRAY ZEND_GET_MODULE(spl_fixedarray) #endif typedef struct _spl_fixedarray { /* {{{ */ long size; zval **elements; } spl_fixedarray; /* }}} */ typedef struct _spl_fixedarray_object { /* {{{ */ zend_object std; spl_fixedarray *array; zval *retval; zend_function *fptr_offset_get; zend_function *fptr_offset_set; zend_function *fptr_offset_has; zend_function *fptr_offset_del; zend_function *fptr_it_next; zend_function *fptr_it_rewind; zend_function *fptr_it_current; zend_function *fptr_it_key; zend_function *fptr_it_valid; int current; zend_class_entry *ce_get_iterator; } spl_fixedarray_object; /* }}} */ typedef struct _spl_fixedarray_it { /* {{{ */ zend_user_iterator intern; spl_fixedarray_object *object; } spl_fixedarray_it; /* }}} */ static void spl_fixedarray_init(spl_fixedarray *array, long size TSRMLS_DC) /* {{{ */ { if (size > 0) { array->size = 0; /* reset size in case ecalloc() fails */ array->elements = ecalloc(size, sizeof(zval *)); array->size = size; } else { array->elements = NULL; array->size = 0; } } /* }}} */ static void spl_fixedarray_resize(spl_fixedarray *array, long size TSRMLS_DC) /* {{{ */ { if (size == array->size) { /* nothing to do */ return; } /* first initialization */ if (array->size == 0) { spl_fixedarray_init(array, size TSRMLS_CC); return; } /* clearing the array */ if (size == 0) { long i; for (i = 0; i < array->size; i++) { if (array->elements[i]) { zval_ptr_dtor(&(array->elements[i])); } } if (array->elements) { efree(array->elements); array->elements = NULL; } } else if (size > array->size) { array->elements = erealloc(array->elements, sizeof(zval *) * size); memset(array->elements + array->size, '\0', sizeof(zval *) * (size - array->size)); } else { /* size < array->size */ long i; for (i = size; i < array->size; i++) { if (array->elements[i]) { zval_ptr_dtor(&(array->elements[i])); } } array->elements = erealloc(array->elements, sizeof(zval *) * size); } array->size = size; } /* }}} */ static void spl_fixedarray_copy(spl_fixedarray *to, spl_fixedarray *from TSRMLS_DC) /* {{{ */ { int i; for (i = 0; i < from->size; i++) { if (from->elements[i]) { Z_ADDREF_P(from->elements[i]); to->elements[i] = from->elements[i]; } else { to->elements[i] = NULL; } } } /* }}} */ static HashTable* spl_fixedarray_object_get_debug_info(zval *obj, int *is_temp TSRMLS_DC) /* {{{{ */ { spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(obj TSRMLS_CC); HashTable *rv; zval *tmp, zrv, *fixedarray_array; zstr pnstr; int pnlen; int i = 0; *is_temp = 1; ALLOC_HASHTABLE(rv); ZEND_INIT_SYMTABLE_EX(rv, zend_hash_num_elements(intern->std.properties) + 1, 0); INIT_PZVAL(&zrv); Z_ARRVAL(zrv) = rv; zend_hash_copy(rv, intern->std.properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); ALLOC_INIT_ZVAL(fixedarray_array); array_init(fixedarray_array); if (intern->array) { for (i = 0; i < intern->array->size; i++) { if (intern->array->elements[i]) { add_index_zval(fixedarray_array, i, (zval *)intern->array->elements[i]); Z_ADDREF_P(intern->array->elements[i]); } else { add_index_zval(fixedarray_array, i, (zval *)EG(uninitialized_zval_ptr)); Z_ADDREF_P(EG(uninitialized_zval_ptr)); } } } pnstr = spl_gen_private_prop_name(spl_ce_SplFixedArray, "array", sizeof("array")-1, &pnlen TSRMLS_CC); add_u_assoc_zval_ex(&zrv, ZEND_STR_TYPE, pnstr, pnlen+1, fixedarray_array); efree(pnstr.v); return rv; } /* }}}} */ static void spl_fixedarray_object_free_storage(void *object TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern = (spl_fixedarray_object *)object; long i; if (intern->array) { for (i = 0; i < intern->array->size; i++) { if (intern->array->elements[i]) { zval_ptr_dtor(&(intern->array->elements[i])); } } if (intern->array->size > 0 && intern->array->elements) { efree(intern->array->elements); } efree(intern->array); } zend_object_std_dtor(&intern->std TSRMLS_CC); zval_ptr_dtor(&intern->retval); efree(object); } /* }}} */ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); static zend_object_value spl_fixedarray_object_new_ex(zend_class_entry *class_type, spl_fixedarray_object **obj, zval *orig, int clone_orig TSRMLS_DC) /* {{{ */ { zend_object_value retval; spl_fixedarray_object *intern; zval *tmp; zend_class_entry *parent = class_type; int inherited = 0; intern = ecalloc(1, sizeof(spl_fixedarray_object)); *obj = intern; ALLOC_INIT_ZVAL(intern->retval); zend_object_std_init(&intern->std, class_type TSRMLS_CC); zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); intern->current = 0; if (orig && clone_orig) { spl_fixedarray_object *other = (spl_fixedarray_object*)zend_object_store_get_object(orig TSRMLS_CC); intern->ce_get_iterator = other->ce_get_iterator; intern->array = emalloc(sizeof(spl_fixedarray)); spl_fixedarray_init(intern->array, other->array->size TSRMLS_CC); spl_fixedarray_copy(intern->array, other->array TSRMLS_CC); } while (parent) { if (parent == spl_ce_SplFixedArray) { retval.handlers = &spl_handler_SplFixedArray; break; } parent = parent->parent; inherited = 1; } retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, spl_fixedarray_object_free_storage, NULL TSRMLS_CC); if (!parent) { /* this must never happen */ php_error_docref(NULL TSRMLS_CC, E_COMPILE_ERROR, "Internal compiler error, Class is not child of SplFixedArray"); } if (inherited) { zend_hash_find(&class_type->function_table, "offsetget", sizeof("offsetget"), (void **) &intern->fptr_offset_get); if (intern->fptr_offset_get->common.scope == parent) { intern->fptr_offset_get = NULL; } zend_hash_find(&class_type->function_table, "offsetset", sizeof("offsetset"), (void **) &intern->fptr_offset_set); if (intern->fptr_offset_set->common.scope == parent) { intern->fptr_offset_set = NULL; } zend_hash_find(&class_type->function_table, "offsetexists", sizeof("offsetexists"), (void **) &intern->fptr_offset_has); if (intern->fptr_offset_has->common.scope == parent) { intern->fptr_offset_has = NULL; } zend_hash_find(&class_type->function_table, "offsetunset", sizeof("offsetunset"), (void **) &intern->fptr_offset_del); if (intern->fptr_offset_del->common.scope == parent) { intern->fptr_offset_del = NULL; } zend_hash_find(&class_type->function_table, "next", sizeof("next"), (void **) &intern->fptr_it_next); if (intern->fptr_it_next->common.scope == parent) { intern->fptr_it_next = NULL; } zend_hash_find(&class_type->function_table, "rewind", sizeof("rewind"), (void **) &intern->fptr_it_rewind); if (intern->fptr_it_rewind->common.scope == parent) { intern->fptr_it_rewind = NULL; } zend_hash_find(&class_type->function_table, "current", sizeof("current"), (void **) &intern->fptr_it_current); if (intern->fptr_it_current->common.scope == parent) { intern->fptr_it_current = NULL; } zend_hash_find(&class_type->function_table, "key", sizeof("key"), (void **) &intern->fptr_it_key); if (intern->fptr_it_key->common.scope == parent) { intern->fptr_it_key = NULL; } zend_hash_find(&class_type->function_table, "valid", sizeof("valid"), (void **) &intern->fptr_it_valid); if (intern->fptr_it_valid->common.scope == parent) { intern->fptr_it_valid = NULL; } } return retval; } /* }}} */ static zend_object_value spl_fixedarray_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *tmp; return spl_fixedarray_object_new_ex(class_type, &tmp, NULL, 0 TSRMLS_CC); } /* }}} */ static zend_object_value spl_fixedarray_object_clone(zval *zobject TSRMLS_DC) /* {{{ */ { zend_object_value new_obj_val; zend_object *old_object; zend_object *new_object; zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); spl_fixedarray_object *intern; old_object = zend_objects_get_address(zobject TSRMLS_CC); new_obj_val = spl_fixedarray_object_new_ex(old_object->ce, &intern, zobject, 1 TSRMLS_CC); new_object = &intern->std; zend_objects_clone_members(new_object, new_obj_val, old_object, handle TSRMLS_CC); return new_obj_val; } /* }}} */ static inline zval **spl_fixedarray_object_read_dimension_helper(spl_fixedarray_object *intern, zval *offset TSRMLS_DC) /* {{{ */ { long index; /* we have to return NULL on error here to avoid memleak because of * ZE duplicating uninitialized_zval_ptr */ if (!offset) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); return NULL; } index = spl_offset_convert_to_long(offset TSRMLS_CC); if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); return NULL; } else if(!intern->array->elements[index]) { return NULL; } else { return &intern->array->elements[index]; } } /* }}} */ static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern; zval **retval; intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->fptr_offset_get) { zval *rv; SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, intern->std.ce, &intern->fptr_offset_get, "offsetGet", &rv, offset); zval_ptr_dtor(&offset); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); ZVAL_ZVAL(intern->retval, rv, 1, 1); return intern->retval; } return EG(uninitialized_zval_ptr); } retval = spl_fixedarray_object_read_dimension_helper(intern, offset TSRMLS_CC); if (retval) { return *retval; } return NULL; } /* }}} */ static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_object *intern, zval *offset, zval *value TSRMLS_DC) /* {{{ */ { long index; if (!offset) { /* '$array[] = value' syntax is not supported */ zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); return; } index = spl_offset_convert_to_long(offset TSRMLS_CC); if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); return; } else { if (intern->array->elements[index]) { zval_ptr_dtor(&(intern->array->elements[index])); } SEPARATE_ARG_IF_REF(value); intern->array->elements[index] = value; } } /* }}} */ static void spl_fixedarray_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern; intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->fptr_offset_set) { SEPARATE_ARG_IF_REF(offset); SEPARATE_ARG_IF_REF(value); zend_call_method_with_2_params(&object, intern->std.ce, &intern->fptr_offset_set, "offsetSet", NULL, offset, value); zval_ptr_dtor(&value); zval_ptr_dtor(&offset); return; } spl_fixedarray_object_write_dimension_helper(intern, offset, value TSRMLS_CC); } /* }}} */ static inline void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_object *intern, zval *offset TSRMLS_DC) /* {{{ */ { long index; index = spl_offset_convert_to_long(offset TSRMLS_CC); if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); return; } else { if (intern->array->elements[index]) { zval_ptr_dtor(&(intern->array->elements[index])); } intern->array->elements[index] = NULL; } } /* }}} */ static void spl_fixedarray_object_unset_dimension(zval *object, zval *offset TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern; intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->fptr_offset_del) { SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, intern->std.ce, &intern->fptr_offset_del, "offsetUnset", NULL, offset); zval_ptr_dtor(&offset); return; } spl_fixedarray_object_unset_dimension_helper(intern, offset TSRMLS_CC); } /* }}} */ static inline int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_object *intern, zval *offset, int check_empty TSRMLS_DC) /* {{{ */ { long index; int retval; index = spl_offset_convert_to_long(offset TSRMLS_CC); if (index < 0 || intern->array == NULL || index >= intern->array->size) { retval = 0; } else { if (!intern->array->elements[index]) { retval = 0; } else if (check_empty) { if (zend_is_true(intern->array->elements[index])) { retval = 1; } else { retval = 0; } } else { /* != NULL and !check_empty */ retval = 1; } } return retval; } /* }}} */ static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern; intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->fptr_offset_get) { zval *rv; SEPARATE_ARG_IF_REF(offset); zend_call_method_with_1_params(&object, intern->std.ce, &intern->fptr_offset_has, "offsetExists", &rv, offset); zval_ptr_dtor(&offset); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); ZVAL_ZVAL(intern->retval, rv, 1, 1); return zend_is_true(intern->retval); } return 0; } return spl_fixedarray_object_has_dimension_helper(intern, offset, check_empty TSRMLS_CC); } /* }}} */ static int spl_fixedarray_object_count_elements(zval *object, long *count TSRMLS_DC) /* {{{ */ { spl_fixedarray_object *intern; intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->array) { *count = intern->array->size; } else { *count = 0; } return SUCCESS; } /* }}} */ /* {{{ proto void SplFixedArray::__construct([int size]) */ SPL_METHOD(SplFixedArray, __construct) { zval *object = getThis(); spl_fixedarray_object *intern; long size = 0; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &size)) { return; } if (size < 0) { zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array size cannot be less than zero"); return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->array) { /* called __construct() twice, bail out */ return; } intern->array = emalloc(sizeof(spl_fixedarray)); spl_fixedarray_init(intern->array, size TSRMLS_CC); } /* }}} */ /* {{{ proto int SplFixedArray::count(void) */ SPL_METHOD(SplFixedArray, count) { zval *object = getThis(); spl_fixedarray_object *intern; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "")) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->array) { RETURN_LONG(intern->array->size); } RETURN_LONG(0); } /* }}} */ /* {{{ proto int SplFixedArray::getSize(void) */ SPL_METHOD(SplFixedArray, getSize) { zval *object = getThis(); spl_fixedarray_object *intern; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "")) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (intern->array) { RETURN_LONG(intern->array->size); } RETURN_LONG(0); } /* }}} */ /* {{{ proto bool SplFixedArray::setSize(int size) */ SPL_METHOD(SplFixedArray, setSize) { zval *object = getThis(); spl_fixedarray_object *intern; long size; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &size)) { return; } if (size < 0) { zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "array size cannot be less than zero"); return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(object TSRMLS_CC); if (!intern->array) { intern->array = ecalloc(1, sizeof(spl_fixedarray)); } spl_fixedarray_resize(intern->array, size TSRMLS_CC); RETURN_TRUE; } /* }}} */ /* {{{ proto bool SplFixedArray::offsetExists(mixed $index) U Returns whether the requested $index exists. */ SPL_METHOD(SplFixedArray, offsetExists) { zval *zindex; spl_fixedarray_object *intern; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zindex) == FAILURE) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(spl_fixedarray_object_has_dimension_helper(intern, zindex, 0 TSRMLS_CC)); } /* }}} */ /* {{{ proto mixed SplFixedArray::offsetGet(mixed $index) U Returns the value at the specified $index. */ SPL_METHOD(SplFixedArray, offsetGet) { zval *zindex, **value_pp; spl_fixedarray_object *intern; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zindex) == FAILURE) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(getThis() TSRMLS_CC); value_pp = spl_fixedarray_object_read_dimension_helper(intern, zindex TSRMLS_CC); if (value_pp) { RETURN_ZVAL(*value_pp, 1, 0); } RETURN_NULL(); } /* }}} */ /* {{{ proto void SplFixedArray::offsetSet(mixed $index, mixed $newval) U Sets the value at the specified $index to $newval. */ SPL_METHOD(SplFixedArray, offsetSet) { zval *zindex, *value; spl_fixedarray_object *intern; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &zindex, &value) == FAILURE) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(getThis() TSRMLS_CC); spl_fixedarray_object_write_dimension_helper(intern, zindex, value TSRMLS_CC); } /* }}} */ /* {{{ proto void SplFixedArray::offsetUnset(mixed $index) U Unsets the value at the specified $index. */ SPL_METHOD(SplFixedArray, offsetUnset) { zval *zindex; spl_fixedarray_object *intern; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zindex) == FAILURE) { return; } intern = (spl_fixedarray_object *)zend_object_store_get_object(getThis() TSRMLS_CC); spl_fixedarray_object_unset_dimension_helper(intern, zindex TSRMLS_CC); } /* }}} */ static void spl_fixedarray_it_dtor(zend_object_iterator *iter TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; zend_user_it_invalidate_current(iter TSRMLS_CC); zval_ptr_dtor((zval**)&iterator->intern.it.data); efree(iterator); } /* }}} */ static void spl_fixedarray_it_rewind(zend_object_iterator *iter TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; spl_fixedarray_object *intern = iterator->object; zval *object = (zval *)&iterator->intern.it.data; if (intern->fptr_it_rewind) { zend_call_method_with_0_params(&object, intern->std.ce, &intern->fptr_it_rewind, "rewind", NULL); } iterator->object->current = 0; } /* }}} */ static int spl_fixedarray_it_valid(zend_object_iterator *iter TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; spl_fixedarray_object *intern = iterator->object; zval *object = (zval *)&iterator->intern.it.data; if (intern->fptr_it_valid) { zval *rv; zend_call_method_with_0_params(&object, intern->std.ce, &intern->fptr_it_valid, "valid", &rv); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); ZVAL_ZVAL(intern->retval, rv, 1, 1); return zend_is_true(intern->retval) ? SUCCESS : FAILURE; } return FAILURE; } if (iterator->object->current >= 0 && iterator->object->array && iterator->object->current < iterator->object->array->size) { return SUCCESS; } return FAILURE; } /* }}} */ static void spl_fixedarray_it_get_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) /* {{{ */ { zval *zindex; spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; spl_fixedarray_object *intern = iterator->object; zval *object = (zval *)&iterator->intern.it.data; if (intern->fptr_it_current) { zval *rv; zend_call_method_with_0_params(&object, intern->std.ce, &intern->fptr_it_current, "current", &rv); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); ZVAL_ZVAL(intern->retval, rv, 1, 1); *data = &intern->retval; return; } *data = NULL; return; } ALLOC_INIT_ZVAL(zindex); ZVAL_LONG(zindex, iterator->object->current); *data = spl_fixedarray_object_read_dimension_helper(intern, zindex TSRMLS_CC); if (*data == NULL) { *data = &EG(uninitialized_zval_ptr); } zval_ptr_dtor(&zindex); } /* }}} */ static int spl_fixedarray_it_get_current_key(zend_object_iterator *iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; spl_fixedarray_object *intern = iterator->object; zval *object = (zval *)&iterator->intern.it.data; if (intern->fptr_it_key) { zval *rv; zend_call_method_with_0_params(&object, intern->std.ce, &intern->fptr_it_key, "key", &rv); if (rv) { zval_ptr_dtor(&intern->retval); MAKE_STD_ZVAL(intern->retval); ZVAL_ZVAL(intern->retval, rv, 1, 1); convert_to_long(intern->retval); *int_key = (ulong) Z_LVAL_P(intern->retval); } *int_key = (ulong) 0; } else { *int_key = (ulong) iterator->object->current; } return HASH_KEY_IS_LONG; } /* }}} */ static void spl_fixedarray_it_move_forward(zend_object_iterator *iter TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter; spl_fixedarray_object *intern = iterator->object; zval *object = (zval *)&iterator->intern.it.data; if (intern->fptr_it_next) { zend_call_method_with_0_params(&object, intern->std.ce, &intern->fptr_it_next, "next", NULL); } zend_user_it_invalidate_current(iter TSRMLS_CC); iterator->object->current++; } /* }}} */ /* {{{ proto int SplFixedArray::key() U Return current array key */ SPL_METHOD(SplFixedArray, key) { spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_LONG(intern->current); } /* }}} */ /* {{{ proto void SplFixedArray::next() U Move to next entry */ SPL_METHOD(SplFixedArray, next) { spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(getThis() TSRMLS_CC); intern->current++; } /* }}} */ /* {{{ proto bool SplFixedArray::valid() U Check whether the datastructure contains more entries */ SPL_METHOD(SplFixedArray, valid) { spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(getThis() TSRMLS_CC); RETURN_BOOL(intern->current >= 0 && intern->array && intern->current < intern->array->size); } /* }}} */ /* {{{ proto void SplFixedArray::rewind() U Rewind the datastructure back to the start */ SPL_METHOD(SplFixedArray, rewind) { spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(getThis() TSRMLS_CC); intern->current = 0; } /* }}} */ /* {{{ proto mixed|NULL SplFixedArray::current() U Return current datastructure entry */ SPL_METHOD(SplFixedArray, current) { zval *zindex, **value_pp; spl_fixedarray_object *intern = (spl_fixedarray_object*)zend_object_store_get_object(getThis() TSRMLS_CC); ALLOC_INIT_ZVAL(zindex); ZVAL_LONG(zindex, intern->current); value_pp = spl_fixedarray_object_read_dimension_helper(intern, zindex TSRMLS_CC); zval_ptr_dtor(&zindex); if (value_pp) { RETURN_ZVAL(*value_pp, 1, 0); } RETURN_NULL(); } /* }}} */ /* iterator handler table */ zend_object_iterator_funcs spl_fixedarray_it_funcs = { spl_fixedarray_it_dtor, spl_fixedarray_it_valid, spl_fixedarray_it_get_current_data, spl_fixedarray_it_get_current_key, spl_fixedarray_it_move_forward, spl_fixedarray_it_rewind }; zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) /* {{{ */ { spl_fixedarray_it *iterator; spl_fixedarray_object *fixedarray_object = (spl_fixedarray_object*)zend_object_store_get_object(object TSRMLS_CC); if (by_ref) { zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0 TSRMLS_CC); return NULL; } Z_ADDREF_P(object); iterator = emalloc(sizeof(spl_fixedarray_it)); iterator->intern.it.data = (void*)object; iterator->intern.it.funcs = &spl_fixedarray_it_funcs; iterator->intern.ce = ce; iterator->intern.value = NULL; iterator->object = fixedarray_object; return (zend_object_iterator*)iterator; } /* }}} */ static ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetGet, 0, 0, 1) ZEND_ARG_INFO(0, index) ZEND_END_ARG_INFO() static ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetSet, 0, 0, 2) ZEND_ARG_INFO(0, index) ZEND_ARG_INFO(0, newval) ZEND_END_ARG_INFO() static ZEND_BEGIN_ARG_INFO(arginfo_fixedarray_setSize, 0) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() static zend_function_entry spl_funcs_SplFixedArray[] = { /* {{{ */ SPL_ME(SplFixedArray, __construct, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, count, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, getSize, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, setSize, arginfo_fixedarray_setSize, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, offsetExists, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, offsetGet, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, offsetSet, arginfo_fixedarray_offsetSet, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, offsetUnset, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, rewind, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, current, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, key, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, next, NULL, ZEND_ACC_PUBLIC) SPL_ME(SplFixedArray, valid, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; /* }}} */ /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(spl_fixedarray) { REGISTER_SPL_STD_CLASS_EX(SplFixedArray, spl_fixedarray_new, spl_funcs_SplFixedArray); memcpy(&spl_handler_SplFixedArray, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); spl_handler_SplFixedArray.clone_obj = spl_fixedarray_object_clone; spl_handler_SplFixedArray.count_elements = spl_fixedarray_object_count_elements; spl_handler_SplFixedArray.read_dimension = spl_fixedarray_object_read_dimension; spl_handler_SplFixedArray.write_dimension = spl_fixedarray_object_write_dimension; spl_handler_SplFixedArray.unset_dimension = spl_fixedarray_object_unset_dimension; spl_handler_SplFixedArray.has_dimension = spl_fixedarray_object_has_dimension; spl_handler_SplFixedArray.count_elements = spl_fixedarray_object_count_elements; spl_handler_SplFixedArray.get_debug_info = spl_fixedarray_object_get_debug_info; REGISTER_SPL_IMPLEMENTS(SplFixedArray, Iterator); REGISTER_SPL_IMPLEMENTS(SplFixedArray, ArrayAccess); REGISTER_SPL_IMPLEMENTS(SplFixedArray, Countable); spl_ce_SplFixedArray->get_iterator = spl_fixedarray_get_iterator; return SUCCESS; } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_fixedarray.h?view=markup&rev=1.1 Index: php-src/ext/spl/spl_fixedarray.h +++ php-src/ext/spl/spl_fixedarray.h /* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2008 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Antony Dovgal <[EMAIL PROTECTED]> | | Etienne Kneuss <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ /* $Id: spl_fixedarray.h,v 1.1 2008/06/18 14:54:27 colder Exp $ */ #ifndef SPL_FIXEDARRAY_H #define SPL_FIXEDARRAY_H PHPAPI zend_class_entry *spl_ce_SplFixedArray; PHP_MINIT_FUNCTION(spl_fixedarray); #endif /* SPL_FIXEDARRAY_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_001.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_001.phpt +++ php-src/ext/spl/tests/fixedarray_001.phpt --TEST-- SPL: FixedArray: std operations --INI-- allow_call_time_pass_reference=1 --FILE-- <?php $a = new SplFixedArray(0); // errors try { $a[0] = "value1"; } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } try { var_dump($a["asdf"]); } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } try { unset($a[-1]); } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } $a->setSize(10); $a[0] = "value0"; $a[1] = "value1"; $a[2] = "value2"; $a[3] = "value3"; $ref = "value4"; $ref2 =&$ref; $a[4] = $ref; $ref = "value5"; unset($a[1]); var_dump($a[0], $a[2], $a[3], $a[4]); // countable var_dump(count($a), $a->getSize(), count($a) == $a->getSize()); // clonable $b = clone $a; $a[0] = "valueNew"; var_dump($b[0]); ?> ===DONE=== --EXPECTF-- Exception: Index invalid or out of range Exception: Index invalid or out of range Exception: Index invalid or out of range unicode(6) "value0" unicode(6) "value2" unicode(6) "value3" unicode(6) "value4" int(10) int(10) bool(true) unicode(6) "value0" ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_002.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_002.phpt +++ php-src/ext/spl/tests/fixedarray_002.phpt --TEST-- SPL: FixedArray: overloading --INI-- allow_call_time_pass_reference=1 --FILE-- <?php class A extends SplFixedArray { public function count() { return 2; } public function offsetGet($n) { echo "A::offsetGet\n"; return parent::offsetGet($n); } public function offsetSet($n, $v) { echo "A::offsetSet\n"; return parent::offsetSet($n, $v); } public function offsetUnset($n) { echo "A::offsetUnset\n"; return parent::offsetUnset($n); } public function offsetExists($n) { echo "A::offsetExists\n"; return parent::offsetExists($n); } } $a = new A; // errors try { $a[0] = "value1"; } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } try { var_dump($a["asdf"]); } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } try { unset($a[-1]); } catch (RuntimeException $e) { echo "Exception: ".$e->getMessage()."\n"; } $a->setSize(10); $a[0] = "value0"; $a[1] = "value1"; $a[2] = "value2"; $a[3] = "value3"; $ref = "value4"; $ref2 =&$ref; $a[4] = $ref; $ref = "value5"; unset($a[1]); var_dump(isset($a[1]), isset($a[2]), empty($a[1]), empty($a[2])); var_dump($a[0], $a[2], $a[3], $a[4]); // countable var_dump(count($a), $a->getSize(), count($a) == $a->getSize()); ?> ===DONE=== --EXPECTF-- A::offsetSet Exception: Index invalid or out of range A::offsetGet Exception: Index invalid or out of range A::offsetUnset Exception: Index invalid or out of range A::offsetSet A::offsetSet A::offsetSet A::offsetSet A::offsetSet A::offsetUnset A::offsetExists A::offsetExists A::offsetExists A::offsetExists bool(false) bool(true) bool(true) bool(false) A::offsetGet A::offsetGet A::offsetGet A::offsetGet unicode(6) "value0" unicode(6) "value2" unicode(6) "value3" unicode(6) "value4" int(2) int(10) bool(false) ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_003.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_003.phpt +++ php-src/ext/spl/tests/fixedarray_003.phpt --TEST-- SPL: FixedArray: Iterators --FILE-- <?php class A extends SplFixedArray { public function current() { echo "A::current\n"; return parent::current(); } public function key() { echo "A::key\n"; return parent::key(); } public function rewind() { echo "A::rewind\n"; return parent::rewind(); } public function valid() { echo "A::valid\n"; return parent::valid(); } public function next() { echo "A::next\n"; return parent::next(); } } echo "==Direct instance==\n"; $a = new SplFixedArray(5); $a[0] = "a"; $a[1] = "c"; $a[2] = "d"; $a[3] = "e"; $a[4] = "f"; foreach ($a as $k => $v) { echo "$k => $v\n"; } echo "==Child instance==\n"; $a = new A(5); $a[0] = "a"; $a[1] = "c"; $a[2] = "d"; $a[3] = "e"; $a[4] = "f"; foreach ($a as $k => $v) { echo "$k => $v\n"; } ?> ===DONE=== --EXPECTF-- ==Direct instance== 0 => a 1 => c 2 => d 3 => e 4 => f ==Child instance== A::rewind A::valid A::current A::key 0 => a A::next A::valid A::current A::key 1 => c A::next A::valid A::current A::key 2 => d A::next A::valid A::current A::key 3 => e A::next A::valid A::current A::key 4 => f A::next A::valid ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_004.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_004.phpt +++ php-src/ext/spl/tests/fixedarray_004.phpt --TEST-- SPL: FixedArray: adding new elements --FILE-- <?php $a = new SplFixedArray(10); try { $a[] = 1; } catch (Exception $e) { var_dump($e->getMessage()); } ?> ===DONE=== --EXPECTF-- unicode(29) "Index invalid or out of range" ===DONE=== http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_005.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_005.phpt +++ php-src/ext/spl/tests/fixedarray_005.phpt --TEST-- SPL: FixedArray: Trying to instantiate passing object to constructor parameter --FILE-- <?php $b = new stdClass; $a = new SplFixedArray($b); ?> --EXPECTF-- Warning: SplFixedArray::__construct() expects parameter 1 to be long, object given in %s on line %d http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_006.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_006.phpt +++ php-src/ext/spl/tests/fixedarray_006.phpt --TEST-- SPL: FixedArray: Assigning objects --FILE-- <?php $b = 10000; $a = new SplFixedArray($b); try { for ($i = 0; $i < 100; $i++) { $a[] = new stdClass; } } catch (Exception $e) { echo $e->getMessage(), "\n"; } print "ok\n"; ?> --EXPECT-- Index invalid or out of range ok http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_007.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_007.phpt +++ php-src/ext/spl/tests/fixedarray_007.phpt --TEST-- SPL: FixedArray: Assigning the itself object --FILE-- <?php $b = 10; $a = new SplFixedArray($b); try { $a[1] = $a; } catch (Exception $e) { echo $e->getMessage(), "\n"; } foreach ($a as $c) { if ($c) { echo $c->getSize(), "\n"; } } print "ok\n"; ?> --EXPECT-- 10 ok http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_008.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_008.phpt +++ php-src/ext/spl/tests/fixedarray_008.phpt --TEST-- SPL: FixedArray: Assigning the itself object testing the reference --FILE-- <?php $b = 3; $a = new SplFixedArray($b); $a[0] = 1; $a[1] = 2; $a[2] = $a; $a[2][0] = 3; foreach ($a as $x) { if (is_object($x)) { var_dump($x[0]); } else { var_dump($x); } } var_dump($a->getSize()); ?> --EXPECT-- int(3) int(2) int(3) int(3) http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_009.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_009.phpt +++ php-src/ext/spl/tests/fixedarray_009.phpt --TEST-- SPL: FixedArray: Trying to instantiate passing string to construtor parameter --FILE-- <?php $a = new SplFixedArray('FOO'); ?> --EXPECTF-- Warning: SplFixedArray::__construct() expects parameter 1 to be long, Unicode string given in %s on line %d http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_010.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_010.phpt +++ php-src/ext/spl/tests/fixedarray_010.phpt --TEST-- SPL: FixedArray: Setting size to 0 --FILE-- <?php $a = new SplFixedArray(1); $a[0] = 1; $a->setSize(0); print "ok\n"; ?> --EXPECT-- ok http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_011.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_011.phpt +++ php-src/ext/spl/tests/fixedarray_011.phpt --TEST-- SPL: FixedArray: Testing setSize() with NULL --FILE-- <?php $a = new SplFixedArray(100); $a->setSize(NULL); print "ok\n"; ?> --EXPECT-- ok http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_012.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_012.phpt +++ php-src/ext/spl/tests/fixedarray_012.phpt --TEST-- SPL: FixedArray: Assigning the object to another variable using [] --FILE-- <?php $a = new SplFixedArray(100); try { $b = &$a[]; } catch (Exception $e) { echo $e->getMessage(), "\n"; } print "ok\n"; ?> --EXPECT-- Index invalid or out of range ok http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_013.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_013.phpt +++ php-src/ext/spl/tests/fixedarray_013.phpt --TEST-- SPL: FixedArray: Passing the object using [] as parameter --FILE-- <?php $a = new SplFixedArray(100); function test(SplFixedArray &$arr) { print "ok\n"; } try { test($a[]); } catch (Exception $e) { echo $e->getMessage(), "\n"; } ?> --EXPECT-- Index invalid or out of range http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_014.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_014.phpt +++ php-src/ext/spl/tests/fixedarray_014.phpt --TEST-- SPL: FixedArray: Trying to access inexistent item --FILE-- <?php try { $a = new SplFixedArray(NULL); echo $a[0]++; } catch (Exception $e) { echo $e->getMessage(); } ?> --EXPECT-- Index invalid or out of range http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/fixedarray_015.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/fixedarray_015.phpt +++ php-src/ext/spl/tests/fixedarray_015.phpt --TEST-- SPL: FixedArray: accessing uninitialized array --FILE-- <?php $a = new SplFixedArray(''); try { var_dump($a[1]); } catch (Exception $e) { echo $e->getMessage(), "\n"; } try { $a[1] = 1; } catch (Exception $e) { echo $e->getMessage(), "\n"; } try { var_dump(count($a[1])); } catch (Exception $e) { echo $e->getMessage(), "\n"; } try { var_dump($a->getSize()); } catch (Exception $e) { echo $e->getMessage(), "\n"; } try { foreach ($a as $v) { } } catch (Exception $e) { echo $e->getMessage(), "\n"; } try { var_dump($a->setSize(10)); } catch (Exception $e) { echo $e->getMessage(), "\n"; } echo "Done\n"; ?> --EXPECTF-- Warning: SplFixedArray::__construct() expects parameter 1 to be long, Unicode string given in %s on line %d Index invalid or out of range Index invalid or out of range Index invalid or out of range int(0) bool(true) Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php