Matt,
I did a cursory check through ext/ and this seems like the only place
the optimization trick can be applied. I will look into writing a
patch for HEAD when I have a bit more time.
On 12-Nov-06, at 6:20 PM, Matt Wilmas wrote:
Hi Ilia,
Ah, I had wondered what other places could be changed to use the
_quick
functions (but didn't really check). :-) Anyway, will this be
applied to
HEAD also?
Matt
----- Original Message -----
From: "Ilia Alshanetsky"
Sent: Sunday, November 12, 2006
iliaa Sun Nov 12 17:13:23 2006 UTC
Modified files: (Branch: PHP_5_2)
/php-src NEWS
/php-src/ext/standard array.c
Log:
Optimized array functions utilizing php_splice().
http://cvs.php.net/viewvc.cgi/php-src/NEWS?
r1=1.2027.2.547.2.357&r2=1.2027.2.547.2.358&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.357 php-src/NEWS:
1.2027.2.547.2.358
--- php-src/NEWS:1.2027.2.547.2.357 Sun Nov 12 01:14:39 2006
+++ php-src/NEWS Sun Nov 12 17:13:22 2006
@@ -15,6 +15,7 @@
- Streams optimization (Dmitry)
. removed unnecessary ftell() calls (one call for each included
PHP
file)
. disabled calls to read() after EOF
+- Optimized array functions utilizing php_splice(). (Ilia)
- VCWD_REALPATH() is improved to use realpath cache without
VIRTUAL_DIR.
(Dmitry)
- ext/bcmath intialization code is moved from request startup to
module
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?
r1=1.308.2.21.2.15&r2=1.308.2.21.2.16&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.308.2.21.2.15
php-src/ext/standard/array.c:1.308.2.21.2.16
--- php-src/ext/standard/array.c:1.308.2.21.2.15 Sun Nov 12
01:14:39 2006
+++ php-src/ext/standard/array.c Sun Nov 12 17:13:22 2006
@@ -21,7 +21,7 @@
+---------------------------------------------------------------------
-+
*/
-/* $Id: array.c,v 1.308.2.21.2.15 2006/11/12 01:14:39 bjori Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.16 2006/11/12 17:13:22 iliaa Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -1874,7 +1874,7 @@
/* Update output hash depending on key type */
if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry,
sizeof(zval
*), NULL);
+ zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h,
&entry,
sizeof(zval *), NULL);
else
zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *),
NULL);
}
@@ -1885,7 +1885,7 @@
entry = *((zval **)p->pData);
entry->refcount++;
if (p->nKeyLength)
- zend_hash_update(*removed, p->arKey, p->nKeyLength, &entry,
sizeof(zval
*), NULL);
+ zend_hash_quick_update(*removed, p->arKey, p->nKeyLength, p->h,
&entry,
sizeof(zval *), NULL);
else
zend_hash_next_index_insert(*removed, &entry, sizeof(zval *),
NULL);
}
@@ -1897,17 +1897,7 @@
/* ..for each one, create a new zval, copy entry into it and
copy it
into the output hash */
for (i=0; i<list_count; i++) {
entry = *list[i];
- if (entry->refcount>=1000) {
- zval *tmp = (zval *) emalloc(sizeof(zval));
-
- *tmp = *entry;
- zval_copy_ctor(tmp);
- tmp->refcount = 1;
- tmp->is_ref = 0;
- entry = tmp;
- } else {
- entry->refcount++;
- }
+ entry->refcount++;
zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *),
NULL);
}
}
@@ -1917,7 +1907,7 @@
entry = *((zval **)p->pData);
entry->refcount++;
if (p->nKeyLength)
- zend_hash_update(out_hash, p->arKey, p->nKeyLength, &entry,
sizeof(zval
*), NULL);
+ zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h,
&entry,
sizeof(zval *), NULL);
else
zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *),
NULL);
}
@@ -2212,7 +2202,7 @@
/* Get the arguments and do error-checking */
argc = ZEND_NUM_ARGS();
if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &input,
&offset, &length, &z_preserve_keys)) {
- WRONG_PARAM_COUNT;
+ WRONG_PARA¬M_COUNT;
}
if (Z_TYPE_PP(input) != IS_ARRAY) {
Ilia Alshanetsky
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php