From: Marcus Boerger Date: Thu, 29 Jul 2004 19:18:46 +0000 (+0000) Subject: - Increase performance of *sort() and some internal sort operations. X-Git-Tag: PRE_ZEND_VM_DISPATCH_PATCH~313 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dcf007c6da55ed91a96d45442e9d071ed975084e;p=php - Increase performance of *sort() and some internal sort operations. # This patch increases the performance of small arrays/hashes by up to ~15% # The performance increase during the performance talk :-) --- diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 065c9b4680..22754aba9b 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1138,14 +1138,20 @@ ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, ht->pListTail = NULL; ht->pInternalPointer = ht->pListHead; - for (j = 0; j < i; j++) { - if (ht->pListTail) { - ht->pListTail->pListNext = arTmp[j]; - } - arTmp[j]->pListLast = ht->pListTail; - arTmp[j]->pListNext = NULL; - ht->pListTail = arTmp[j]; - } + arTmp[0]->pListLast = NULL; + if (i > 1) { + arTmp[0]->pListNext = arTmp[1]; + for (j = 1; j < i-1; j++) { + arTmp[j]->pListLast = arTmp[j-1]; + arTmp[j]->pListNext = arTmp[j+1]; + } + arTmp[j]->pListLast = ht->pListTail; + arTmp[j]->pListNext = NULL; + } else { + arTmp[0]->pListNext = NULL; + } + ht->pListTail = arTmp[i-1]; + pefree(arTmp, ht->persistent); HANDLE_UNBLOCK_INTERRUPTIONS();