andrei Mon Feb 6 17:42:28 2006 UTC Modified files: /php-src/ext/unicode unicode_iterators.c Log: Make TextIterator fast again, now that we don't have to worry about references. http://cvs.php.net/viewcvs.cgi/php-src/ext/unicode/unicode_iterators.c?r1=1.11&r2=1.12&diff_format=u Index: php-src/ext/unicode/unicode_iterators.c diff -u php-src/ext/unicode/unicode_iterators.c:1.11 php-src/ext/unicode/unicode_iterators.c:1.12 --- php-src/ext/unicode/unicode_iterators.c:1.11 Sun Feb 5 23:31:47 2006 +++ php-src/ext/unicode/unicode_iterators.c Mon Feb 6 17:42:28 2006 @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: unicode_iterators.c,v 1.11 2006/02/05 23:31:47 helly Exp $ */ +/* $Id: unicode_iterators.c,v 1.12 2006/02/06 17:42:28 andrei Exp $ */ /* * TODO @@ -126,16 +126,11 @@ UChar32 cp; int32_t tmp, buf_len; - if (!object->current) { - MAKE_STD_ZVAL(object->current); - Z_USTRVAL_P(object->current) = eumalloc(3); - Z_TYPE_P(object->current) = IS_UNICODE; - tmp = object->u.cp.offset; - U16_NEXT(object->text, tmp, object->text_len, cp); - buf_len = zend_codepoint_to_uchar(cp, Z_USTRVAL_P(object->current)); - Z_USTRVAL_P(object->current)[buf_len] = 0; - Z_USTRLEN_P(object->current) = buf_len; - } + tmp = object->u.cp.offset; + U16_NEXT(object->text, tmp, object->text_len, cp); + buf_len = zend_codepoint_to_uchar(cp, Z_USTRVAL_P(object->current)); + Z_USTRVAL_P(object->current)[buf_len] = 0; + Z_USTRLEN_P(object->current) = buf_len; } static int text_iter_cp_key(text_iter_obj* object TSRMLS_DC) @@ -147,20 +142,12 @@ { U16_FWD_1(object->text, object->u.cp.offset, object->text_len); object->u.cp.index++; - if (object->current) { - zval_ptr_dtor(&object->current); - object->current = NULL; - } } static void text_iter_cp_rewind(text_iter_obj *object TSRMLS_DC) { object->u.cp.offset = 0; object->u.cp.index = 0; - if (object->current) { - zval_ptr_dtor(&object->current); - object->current = NULL; - } } static text_iter_ops text_iter_cp_ops = { @@ -268,9 +255,8 @@ if (intern->text) { efree(intern->text); } - if (intern->current) { - zval_ptr_dtor(&intern->current); - } + ZVAL_DELREF(intern->current); + zval_ptr_dtor(&intern->current); efree(object); } @@ -289,6 +275,10 @@ zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); intern->type = ITER_CODE_POINT; + MAKE_STD_ZVAL(intern->current); /* pre-allocate buffer for codepoint */ + Z_USTRVAL_P(intern->current) = eumalloc(3); + Z_TYPE_P(intern->current) = IS_UNICODE; + ZVAL_ADDREF(intern->current); retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) text_iterator_free_storage, NULL TSRMLS_CC); retval.handlers = zend_get_std_object_handlers();
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php