Re: cvs: php4 /ext/standard basic_functions.c formatted_print.c php_string.h

From: Date: Tue, 07 Aug 2001 19:50:29 +0000
Subject: Re: cvs: php4 /ext/standard basic_functions.c formatted_print.c php_string.h
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-62487@lists.php.net to get a copy of this message
In what case is this useful? I'm kind of worried that so many functions are popping up in PHP which accept arrays as parameters. It's much slower than passing the arguments in a regular way. How often do people dynamically build formats *and* then dynamically build an array of arguments? Andi At 07:44 PM 8/7/2001 +0000, Andrei Zmievski wrote:
andrei          Tue Aug  7 15:44:46 2001 EDT
Modified files:
    /php4/ext/standard  basic_functions.c formatted_print.c php_string.h
Log: @- Added vprintf() and vsprintf() functions that allow passing all arguments @ after format as an array. (Andrei) Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.379 php4/ext/standard/basic_functions.c:1.380 --- php4/ext/standard/basic_functions.c:1.379 Mon Aug 6 09:36:08 2001 +++ php4/ext/standard/basic_functions.c Tue Aug 7 15:44:44 2001 @@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
*/ -/* $Id: basic_functions.c,v 1.379 2001/08/06 13:36:08 thies Exp $ */ +/* $Id: basic_functions.c,v 1.380 2001/08/07 19:44:44 andrei Exp $ */ #include "php.h" #include "php_main.h" @@ -208,6 +208,8 @@
        PHP_FALIAS(strchr,                      strstr,        NULL)
        PHP_NAMED_FE(sprintf,           PHP_FN(user_sprintf),   NULL)
        PHP_NAMED_FE(printf,            PHP_FN(user_printf),    NULL)
+       PHP_FE(vprintf,              NULL)
+       PHP_FE(vsprintf,              NULL)
     PHP_FE(sscanf, third_and_rest_force_ref)
     PHP_FE(fscanf, third_and_rest_force_ref)
        PHP_FE(parse_url,                NULL)
Index: php4/ext/standard/formatted_print.c diff -u php4/ext/standard/formatted_print.c:1.38 php4/ext/standard/formatted_print.c:1.39
--- php4/ext/standard/formatted_print.c:1.38    Mon Jul 30 04:24:36 2001
+++ php4/ext/standard/formatted_print.c Tue Aug 7 15:44:45 2001 @@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
*/ -/* $Id: formatted_print.c,v 1.38 2001/07/30 08:24:36 zeev Exp $ */ +/* $Id: formatted_print.c,v 1.39 2001/08/07 19:44:45 andrei Exp $ */
 #include <math.h>                              /* modf() */
#include "php.h" @@ -408,23 +408,40 @@ * */ static char * -php_formatted_print(int ht, int *len TSRMLS_DC) +php_formatted_print(int ht, int *len, int use_array TSRMLS_DC) {
-       pval ***args;
+       zval ***args, **z_format, **array;
        int argc, size = 240, inpos = 0, outpos = 0, temppos;
        int alignment, width, precision, currarg, adjusting, argnum;
        char *format, *result, padding;
        argc = ZEND_NUM_ARGS();
-       if (argc < 1) {
-               WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
-       }
-       args = (pval ***)emalloc(argc * sizeof(pval *));
+       if (use_array) {
+               int i = 1;
+
+               if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(argc, &z_format, &array) == FAILURE) {
+                       WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
+               }
+               SEPARATE_ZVAL(array);
+               convert_to_array_ex(array);
+               argc = 1 + zend_hash_num_elements(Z_ARRVAL_PP(array));
+               args = (zval ***)emalloc(argc * sizeof(zval *));
+               args[0] = z_format;
+               for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(array));
+                       zend_hash_get_current_data(Z_ARRVAL_PP(array), (void **)&args[i++]) == SUCCESS;
+                       zend_hash_move_forward(Z_ARRVAL_PP(array)));
+       } else {
+               if (argc < 1) {
+                       WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
+               }
+
+               args = (zval ***)emalloc(argc * sizeof(zval *));
-       if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
-               efree(args);
-               WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
+               if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
+                       efree(args);
+                       WRONG_PARAM_COUNT_WITH_RETVAL(NULL);
+               }
        }
        convert_to_string_ex(args[0]);
        format = (*args[0])->value.str.val;
@@ -632,7 +649,22 @@
        char *result;
        int len;
-       if ((result=php_formatted_print(ht, &len TSRMLS_CC))==NULL) {
+       if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) {
+               RETURN_FALSE;
+       }
+       RETVAL_STRINGL(result,len,1);
+       efree(result);
+} +/* }}} */ + +/* {{{ proto string vsprintf(string format, array args) + Return a formatted string */ +PHP_FUNCTION(vsprintf) +{
+       char *result;
+       int len;
+
+       if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) {
                RETURN_FALSE;
        }
        RETVAL_STRINGL(result,len,1);
@@ -647,7 +679,22 @@
        char *result;
        int len;
-       if ((result=php_formatted_print(ht, &len TSRMLS_CC))==NULL) {
+       if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) {
+               RETURN_FALSE;
+       }
+       PHPWRITE(result,len);
+       efree(result);
+} +/* }}} */ + +/* {{{ proto int printf(string format, array args) + Output a formatted string */ +PHP_FUNCTION(vprintf) +{
+       char *result;
+       int len;
+
+       if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) {
                RETURN_FALSE;
        }
        PHPWRITE(result,len);
Index: php4/ext/standard/php_string.h diff -u php4/ext/standard/php_string.h:1.47 php4/ext/standard/php_string.h:1.48 --- php4/ext/standard/php_string.h:1.47 Sun Aug 5 23:50:51 2001
+++ php4/ext/standard/php_string.h      Tue Aug  7 15:44:45 2001
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
*/ -/* $Id: php_string.h,v 1.47 2001/08/06 03:50:51 sas Exp $ */ +/* $Id: php_string.h,v 1.48 2001/08/07 19:44:45 andrei Exp $ */ /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */ @@ -57,6 +57,8 @@ PHP_FUNCTION(hebrevc); PHP_FUNCTION(user_sprintf); PHP_FUNCTION(user_printf); +PHP_FUNCTION(vprintf); +PHP_FUNCTION(vsprintf); PHP_FUNCTION(addcslashes); PHP_FUNCTION(addslashes); PHP_FUNCTION(stripcslashes); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-cvs-unsubscribe@lists.php.net For additional commands, e-mail: php-cvs-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net


« previous php.dev (#62487) next »