Hi Ilia,

Oh, sorry, didn't know it was a time issue. :-)  I thought both branches
were mostly always updated together to keep things synced, etc.  In that
case, if it saves you any time, I've attached the patch for HEAD.


----- Original Message -----
From: "Ilia Alshanetsky"
Sent: Monday, November 13, 2006

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().
>>
Index: ext/standard/array.c
===================================================================
RCS file: /repository/php-src/ext/standard/array.c,v
retrieving revision 1.390
diff -u -r1.390 array.c
--- ext/standard/array.c        12 Nov 2006 01:11:58 -0000      1.390
+++ ext/standard/array.c        13 Nov 2006 15:04:19 -0000
@@ -1977,7 +1977,7 @@
                if (p->nKeyLength == 0) {
                        zend_hash_next_index_insert(out_hash, &entry, 
sizeof(zval *), NULL);
                } else {
-                       zend_u_hash_update(out_hash, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, &entry, sizeof(zval *), NULL);
+                       zend_u_hash_quick_update(out_hash, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
                }
        }
        
@@ -1989,7 +1989,7 @@
                        if (p->nKeyLength == 0) {
                                zend_hash_next_index_insert(*removed, &entry, 
sizeof(zval *), NULL);
                        } else {                        
-                               zend_u_hash_update(*removed, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, &entry, sizeof(zval *), NULL);
+                               zend_u_hash_quick_update(*removed, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
                        }
                }
        } else /* otherwise just skip those entries */
@@ -2000,17 +2000,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);
                }
        }
@@ -2022,7 +2012,7 @@
                if (p->nKeyLength == 0) {
                        zend_hash_next_index_insert(out_hash, &entry, 
sizeof(zval *), NULL);
                } else {
-                       zend_u_hash_update(out_hash, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, &entry, sizeof(zval *), NULL);
+                       zend_u_hash_quick_update(out_hash, p->key.type, 
ZSTR(p->key.arKey.s), p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
                }
        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to