On December 12, 2001 07:33 am, Andrei Zmievski wrote:
> On Wed, 12 Dec 2001, Sterling Hughes wrote:
> >     And those functions would be? :) Are you talking about
> > regularly used functions such as strlen(), etc.?
>
> Functions like count(), for example, that people tend to use in a
> loop unnecessarily.
>
> >     I agree that zend_basic_functions.c should remain abstracted, I
> >     guess where we draw the line is a bit fuzzy to me?  What are
> > your thoughts as to what functions should remain
> >     un-zend-parse-parameterized (say *that* 10 times fast :).
>
> Yes, the distinction is not clear. Perhaps, the person who does the
> conversion for each module could do some benchmark tests on their
> programs and see what might need to be adjusted.

I did a simple test with krsort before and after zend_parse_parameters.

See the attached files for information on the changes that I made and 
the test that I used. In this case, it looks like we face at most about 
a 0.0001 second penalty per function call for using 
zend_parse_parameters. This is based on the data below: (4.762 seconds 
- 3.704 seconds) / 10000 calls to krsort)

Profiling would probably be a better choice, however, I am having a few 
troubles getting profiling going with the PHP source. :) 

As always, correction and comments welcome.

---

With zend_parse_parameters():

real    0m4.762s
user    0m4.710s
sys     0m0.030s
 
real    0m4.738s
user    0m4.700s
sys     0m0.030s
 
real    0m4.726s
user    0m4.700s
sys     0m0.020s

Without zend_parse_parameters(): 

real    0m3.704s
user    0m3.620s
sys     0m0.040s
 
real    0m3.833s
user    0m3.660s
sys     0m0.020s
 
real    0m3.764s
user    0m3.650s
sys     0m0.010s


-- 
Zak Greant

PHP Quality Assurance Team
http://qa.php.net/

"We must be the change we wish to see." - M. K. Ghandi
<?php
foreach (file ('/usr/local/src/data.txt') as $k => $v) {
    $array[$v] = $k;
}

define (MAX, 10000);

for ($x=0; $x < MAX; ++$x) {
    $data = $array;
    krsort ($data);
}
?>
Index: ext/standard/array.c
===================================================================
RCS file: /repository/php4/ext/standard/array.c,v
retrieving revision 1.148
diff -u -r1.148 array.c
--- ext/standard/array.c	11 Dec 2001 15:30:27 -0000	1.148
+++ ext/standard/array.c	13 Dec 2001 07:19:29 -0000
@@ -179,39 +179,34 @@
 	return array_key_compare(a, b TSRMLS_CC) * -1;
 }
 
-/* {{{ proto int krsort(array array_arg [, int sort_flags])
-   Sort an array reverse by key */
+/* {{{ proto bool krsort(array array_arg [, int sort_flags])
+   Sort an array by key value in reverse order */
 PHP_FUNCTION(krsort)
 {
-	zval **array, **sort_type;
-	int sort_type_val = SORT_REGULAR;
+	zval *array;
+	long sort_type_val = SORT_REGULAR;
 	HashTable *target_hash;
 
-	if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 ||
-		zend_get_parameters_ex(ZEND_NUM_ARGS(), &array, &sort_type) == FAILURE) {
-		WRONG_PARAM_COUNT;
-	}
-	target_hash = HASH_OF(*array);
-	if (!target_hash) {
-		php_error(E_WARNING, "Wrong datatype in krsort() call");
-		return;
-	}
-	if (ZEND_NUM_ARGS() == 2) {
-		convert_to_long_ex(sort_type);
-		sort_type_val = Z_LVAL_PP(sort_type);
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type_val) == FAILURE) {
+		RETURN_FALSE;
 	}
+	
+	target_hash = HASH_OF(array);
 	set_compare_func(sort_type_val TSRMLS_CC);
+	
 	if (zend_hash_sort(target_hash, zend_qsort, array_reverse_key_compare, 0 TSRMLS_CC) == FAILURE) {
-		return;
+		RETURN_FALSE;
 	}
+	
 	RETURN_TRUE;
 }
 /* }}} */
CODING_STANDARDS
CREDITS
CVS
ChangeLog
ChangeLog.1999.gz
ChangeLog.2000.gz
EXTENSIONS
INSTALL
LICENSE
Makefile
Makefile.in
NEWS
README.CVS-RULES
README.EXTENSIONS
README.EXT_SKEL
README.PARAMETER_PARSING_API
README.QNX
README.SELF-CONTAINED-EXTENSIONS
README.STREAMS
README.Zeus
RELEASE_PROCESS
TODO
TODO-4.2.txt
TSRM
Zend
acconfig.h
acconfig.h.in
acinclude.m4
aclocal.m4
apidoc-zend.txt
apidoc.txt
build
buildconf
buildmk.stamp
config.guess
config.log
config.nice
config.status
config.sub
config_vars.mk
configure
configure.in
cvsclean
dynlib.m4
ext
footer
generated_lists
genfiles
header
install-sh
libphp4.la
libs
libtool
ltmain.sh
main
makedist
makerpm
missing
mkinstalldirs
modules
pear
php.ini-dist
php.ini-recommended
php4.gif
php4.spec
php4.spec.in
php_version.h
regex
run-tests.php
sapi
scripts
snapshot
stamp-h.in
stub.c
stub.lo
stub.o
tests
win32
-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to