]> granicus.if.org Git - php/commitdiff
MFB: optimize zend_hash_init() with known hash table sizes.
authorIlia Alshanetsky <iliaa@php.net>
Tue, 3 Oct 2006 17:45:16 +0000 (17:45 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 3 Oct 2006 17:45:16 +0000 (17:45 +0000)
ext/standard/array.c
ext/standard/streamsfuncs.c
ext/standard/string.c

index b5e1617945856e847fccb7f24b48ef6e0f1d4eaf..073f88cbd560509de3464fe78f3e23e28ce4e688 100644 (file)
@@ -3073,7 +3073,7 @@ static void php_array_intersect(INTERNAL_FUNCTION_PARAMETERS, int behavior, int
                zval *tmp;
 
                ALLOC_HASHTABLE(ht);
-               zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0);
+               zend_hash_init(ht, zend_hash_num_elements(return_value->value.ht), NULL, ZVAL_PTR_DTOR, 0);
                zend_hash_copy(ht, return_value->value.ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
                return_value->value.ht = ht;            
        }
@@ -3449,7 +3449,7 @@ static void php_array_diff(INTERNAL_FUNCTION_PARAMETERS, int behavior, int data_
                zval *tmp;
 
                ALLOC_HASHTABLE(ht);
-               zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0);
+               zend_hash_init(ht, zend_hash_num_elements(return_value->value.ht), NULL, ZVAL_PTR_DTOR, 0);
                zend_hash_copy(ht, return_value->value.ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
                return_value->value.ht = ht;            
        }
index 6460b92e4076f61b50fcd3f3bb04c09e7754c914..808cfc0baada4baf855d79cbc7731916714a73b3 100644 (file)
@@ -660,7 +660,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC)
                return 0;
        }
        ALLOC_HASHTABLE(new_hash);
-       zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
+       zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(stream_array)), NULL, ZVAL_PTR_DTOR, 0);
        
        for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
                 zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
@@ -708,7 +708,7 @@ static int stream_array_emulate_read_fd_set(zval *stream_array TSRMLS_DC)
                return 0;
        }
        ALLOC_HASHTABLE(new_hash);
-       zend_hash_init(new_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
+       zend_hash_init(new_hash, zend_hash_num_elements(Z_ARRVAL_P(stream_array)), NULL, ZVAL_PTR_DTOR, 0);
        
        for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(stream_array));
                 zend_hash_get_current_data(Z_ARRVAL_P(stream_array), (void **) &elem) == SUCCESS;
index 75279e1a36bd482744cea13d9e7db89e5e3a0fda..903cd525e0a223f182565a0fbde22f9bdbd3252e 100644 (file)
@@ -3836,7 +3836,7 @@ static HashTable* php_u_strtr_array_prepare_hashtable(HashTable *hash, int *minl
        int maxlen = 0, len;
        zval   ctmp;
 
-       zend_hash_init(tmp_hash, 0, NULL, NULL, 0);
+       zend_hash_init(tmp_hash, zend_hash_num_elements(hash), NULL, NULL, 0);
        zend_hash_internal_pointer_reset_ex(hash, &hpos);
        while (zend_hash_get_current_data_ex(hash, (void **)&entry, &hpos) == SUCCESS) {
                switch (zend_hash_get_current_key_ex(hash, &string_key, &string_key_len, &num_key, 0, &hpos)) {