andrei Thu Aug 3 21:46:16 2006 UTC Modified files: /php-src unicode-progress.txt /php-src/ext/standard string.c Log: Update similar_text() to use params API. http://cvs.php.net/viewvc.cgi/php-src/unicode-progress.txt?r1=1.34&r2=1.35&diff_format=u Index: php-src/unicode-progress.txt diff -u php-src/unicode-progress.txt:1.34 php-src/unicode-progress.txt:1.35 --- php-src/unicode-progress.txt:1.34 Wed Aug 2 21:51:43 2006 +++ php-src/unicode-progress.txt Thu Aug 3 21:46:16 2006 @@ -34,6 +34,7 @@ hebrev(), hebrevc() Figure out if this is something we can use ICU for, internally. + Check with Zeev. localeconv() Params API, update to use *_rt_* API. @@ -56,9 +57,6 @@ quotemeta() Params API, IS_UNICODE upgrade - similar_text() - Params API - sscanf() Params API. Rest - no idea yet. http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.558&r2=1.559&diff_format=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.558 php-src/ext/standard/string.c:1.559 --- php-src/ext/standard/string.c:1.558 Wed Aug 2 21:53:43 2006 +++ php-src/ext/standard/string.c Thu Aug 3 21:46:16 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.558 2006/08/02 21:53:43 andrei Exp $ */ +/* $Id: string.c,v 1.559 2006/08/03 21:46:16 andrei Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -4087,50 +4087,42 @@ Calculates the similarity between two strings */ PHP_FUNCTION(similar_text) { - zval **t1, **t2, **percent; - int ac = ZEND_NUM_ARGS(); + zstr t1, t2; + int t1_len, t2_len; + zend_uchar t1_type, t2_type; + zval *percent = NULL; int sim; - zend_uchar str_type; - if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &t1, &t2, &percent) == FAILURE) { - WRONG_PARAM_COUNT; - } - if (Z_TYPE_PP(t1) != IS_UNICODE && Z_TYPE_PP(t1) != IS_STRING) { - convert_to_text_ex(t1); - } - if (Z_TYPE_PP(t2) != IS_UNICODE && Z_TYPE_PP(t2) != IS_STRING) { - convert_to_text_ex(t2); - } - str_type = zend_get_unified_string_type(2 TSRMLS_CC, Z_TYPE_PP(t1), Z_TYPE_PP(t2)); - if (str_type == (zend_uchar)-1) { - zend_error(E_WARNING, "Cannot mix binary and Unicode parameters"); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "TT|z", &t1, &t1_len, + &t1_type, &t2, &t2_len, &t2_type, &percent) == FAILURE) { return; } - convert_to_explicit_type_ex(t1, str_type); - convert_to_explicit_type_ex(t2, str_type); - if (ac > 2) { - convert_to_double_ex(percent); + + if (percent) { + zval_dtor(percent); + Z_TYPE_P(percent) = IS_DOUBLE; } - if (Z_UNILEN_PP(t1) + Z_UNILEN_PP(t2) == 0) { - if (ac > 2) { - Z_DVAL_PP(percent) = 0; + if (t1_len + t2_len == 0) { + if (percent) { + Z_DVAL_P(percent) = 0; } RETURN_LONG(0); } - if (str_type == IS_UNICODE) { - sim = php_u_similar_char(Z_USTRVAL_PP(t1), Z_USTRLEN_PP(t1), Z_USTRVAL_PP(t2), Z_USTRLEN_PP(t2)); + /* t1_type and t2_type are guaranteed to be the same */ + if (t1_type == IS_UNICODE) { + sim = php_u_similar_char(t1.u, t1_len, t2.u, t2_len); } else { - sim = php_similar_char(Z_STRVAL_PP(t1), Z_STRLEN_PP(t1), Z_STRVAL_PP(t2), Z_STRLEN_PP(t2)); + sim = php_similar_char(t1.s, t1_len, t2.s, t2_len); } - if (ac > 2) { - if (str_type == IS_UNICODE) { - Z_DVAL_PP(percent) = sim * 200.0 / (Z_USTRCPLEN_PP(t1) + Z_USTRCPLEN_PP(t2)); + if (percent) { + if (t1_type == IS_UNICODE) { + Z_DVAL_P(percent) = sim * 200.0 / (u_countChar32(t1.u, t1_len) + u_countChar32(t2.u, t2_len)); } else { - Z_DVAL_PP(percent) = sim * 200.0 / (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2)); + Z_DVAL_P(percent) = sim * 200.0 / (t1_len + t2_len); } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php