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

index 13a6ff2c9c3ae726a29eb21f98a38cac69d55862..05f234382e06e5b18486c31ae90780230de90b65 100644 (file)
@@ -3055,7 +3055,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;            
        }
@@ -3441,7 +3441,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 b8534ada6227ca72dda2dcc373737bd5004452a0..7c4beb31286cb40d18fa9c764cbbc6ac2884ebb5 100644 (file)
@@ -614,7 +614,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;
@@ -662,7 +662,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 ecd9eea4e7e93271663e60db8c3dfe16b6626fe3..ee1cdbb845496f597b7c86150e3e60216f0f0065 100644 (file)
@@ -2496,7 +2496,7 @@ static void php_strtr_array(zval *return_value, char *str, int slen, HashTable *
        smart_str result = {0};
        HashTable tmp_hash;
        
-       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)) {