andrei          Fri Jul 14 22:41:22 2006 UTC

  Modified files:              
    /php-src    unicode-progress.txt 
    /php-src/ext/standard       array.c 
  Log:
  Adjust array_pad(), array_reverse(), and array_unique() for params API
  and mark them with U.
  
  
http://cvs.php.net/viewvc.cgi/php-src/unicode-progress.txt?r1=1.23&r2=1.24&diff_format=u
Index: php-src/unicode-progress.txt
diff -u php-src/unicode-progress.txt:1.23 php-src/unicode-progress.txt:1.24
--- php-src/unicode-progress.txt:1.23   Fri Jul 14 22:15:54 2006
+++ php-src/unicode-progress.txt        Fri Jul 14 22:41:22 2006
@@ -31,18 +31,9 @@
     array_multisort()
         Add SORT_LOCALE_STRING, test
 
-    array_pad()
-        Params API, test
-
     array_reduce()
         Params API, FCI cache, test
 
-    array_reverse()
-        Params API, test
-
-    array_unique()
-        Params API, test
-
     array_walk()
         Params API, is_callable check, FCI cache, test
 
@@ -77,12 +68,15 @@
     array_merge_recursive()
     array_product()
     array_push(), array_pop(), array_shift(), array_unshift()
+    array_pad()
     array_rand()
+    array_reverse()
     array_search()
     array_slice()
     array_splice()
     array_sum()
     array_values()
+    array_unique()
     compact()
     count()
     in_array()
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.361&r2=1.362&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.361 php-src/ext/standard/array.c:1.362
--- php-src/ext/standard/array.c:1.361  Fri Jul 14 22:15:54 2006
+++ php-src/ext/standard/array.c        Fri Jul 14 22:41:22 2006
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.361 2006/07/14 22:15:54 andrei Exp $ */
+/* $Id: array.c,v 1.362 2006/07/14 22:41:22 andrei Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -2631,44 +2631,33 @@
 /* }}} */
 
 
-/* {{{ proto array array_reverse(array input [, bool preserve keys])
+/* {{{ proto array array_reverse(array input [, bool preserve keys]) U
    Return input as a new array with the order of the entries reversed */
 PHP_FUNCTION(array_reverse)
 {
-       zval    **input,                          /* Input array */
-               **z_preserve_keys, /* Flag: whether to preserve keys */
-               **entry;                          /* An entry in the input 
array */
+       zval     *input,                          /* Input array */
+                       **entry;                          /* An entry in the 
input array */
        zstr      string_key;
        uint      string_key_len;
        ulong     num_key;
-       zend_bool preserve_keys = 0;
+       zend_bool preserve_keys = 0; /* whether to preserve keys */
        HashPosition pos;
        
-       /* Get arguments and do error-checking */
-       if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || 
zend_get_parameters_ex(ZEND_NUM_ARGS(), &input, &z_preserve_keys) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       
-       if (Z_TYPE_PP(input) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|b", &input,
+                                                         &preserve_keys) == 
FAILURE) {
                return;
        }
 
-       if (ZEND_NUM_ARGS() > 1) {
-               convert_to_boolean_ex(z_preserve_keys);
-               preserve_keys = Z_BVAL_PP(z_preserve_keys);
-       }
-       
        /* Initialize return array */
        array_init(return_value);
        
-       zend_hash_internal_pointer_end_ex(Z_ARRVAL_PP(input), &pos);
-       while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void 
**)&entry, &pos) == SUCCESS) {
+       zend_hash_internal_pointer_end_ex(Z_ARRVAL_P(input), &pos);
+       while (zend_hash_get_current_data_ex(Z_ARRVAL_P(input), (void 
**)&entry, &pos) == SUCCESS) {
                zend_uchar utype;
                 
-               (*entry)->refcount++;
+               zval_add_ref(entry);
                
-               switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(input), 
&string_key, &string_key_len, &num_key, 0, &pos)) {
+               switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(input), 
&string_key, &string_key_len, &num_key, 0, &pos)) {
                        case HASH_KEY_IS_STRING:
                                utype = IS_STRING;
                                goto ukey;
@@ -2687,46 +2676,38 @@
                                break;
                }
                
-               zend_hash_move_backwards_ex(Z_ARRVAL_PP(input), &pos);
+               zend_hash_move_backwards_ex(Z_ARRVAL_P(input), &pos);
        }
 }
 /* }}} */
 
 
-/* {{{ proto array array_pad(array input, int pad_size, mixed pad_value)
+/* {{{ proto array array_pad(array input, int pad_size, mixed pad_value) U
    Returns a copy of input array padded with pad_value to size pad_size */
 PHP_FUNCTION(array_pad)
 {
-       zval  **input;          /* Input array */
-       zval  **pad_size;       /* Size to pad to */
-       zval  **pad_value;      /* Padding value obviously */
+       zval  *input;           /* Input array */
+       zval  *pad_value;       /* Padding value obviously */
        zval ***pads;           /* Array to pass to splice */
-       HashTable *new_hash;    /* Return value from splice */
-       int     input_size;     /* Size of the input array */
-       int     pad_size_abs;   /* Absolute value of pad_size */
-       int     num_pads;       /* How many pads do we need */
-       int     do_pad;         /* Whether we should do padding at all */
+       HashTable *new_hash;/* Return value from splice */
+       long  pad_size;         /* Size to pad to */
+       long pad_size_abs;      /* Absolute value of pad_size */
+       int     input_size;             /* Size of the input array */
+       int     num_pads;               /* How many pads do we need */
+       int     do_pad;                 /* Whether we should do padding at all 
*/
        int     i;
        
-       /* Get arguments and do error-checking */
-       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &input, 
&pad_size, &pad_value) == FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       
-       /* Make sure arguments are of the proper type */
-       if (Z_TYPE_PP(input) != IS_ARRAY) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|lz", &input, 
&pad_size, &pad_value) == FAILURE) {
                return;
        }
-       convert_to_long_ex(pad_size);
-       
+
        /* Do some initial calculations */
-       input_size = zend_hash_num_elements(Z_ARRVAL_PP(input));
-       pad_size_abs = abs(Z_LVAL_PP(pad_size));
+       input_size = zend_hash_num_elements(Z_ARRVAL_P(input));
+       pad_size_abs = abs(pad_size);
        do_pad = (input_size >= pad_size_abs) ? 0 : 1;
        
        /* Copy the original array */
-       RETVAL_ZVAL(*input, 1, 0);
+       RETVAL_ZVAL(input, 1, 0);
        
        /* If no need to pad, no need to continue */
        if (!do_pad) {
@@ -2735,17 +2716,17 @@
 
        /* Populate the pads array */
        num_pads = pad_size_abs - input_size;
-       if(num_pads > 1048576) {
+       if (num_pads > 1048576) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "You may only pad 
up to 1048576 elements at a time");
                RETURN_FALSE;
        }
        pads = (zval ***)safe_emalloc(num_pads, sizeof(zval **), 0);
        for (i = 0; i < num_pads; i++) {
-               pads[i] = pad_value;
+               pads[i] = &pad_value;
        }
 
        /* Pad on the right or on the left */
-       if (Z_LVAL_PP(pad_size) > 0) {
+       if (pad_size > 0) {
                new_hash = php_splice(Z_ARRVAL_P(return_value), input_size, 0, 
pads, num_pads, NULL);
        } else {
                new_hash = php_splice(Z_ARRVAL_P(return_value), 0, 0, pads, 
num_pads, NULL);
@@ -2867,11 +2848,11 @@
 }
 /* }}} */
 
-/* {{{ proto array array_unique(array input)
+/* {{{ proto array array_unique(array input) U
    Removes duplicate values from array */
 PHP_FUNCTION(array_unique)
 {
-       zval **array;
+       zval *array;
        HashTable *target_hash;
        Bucket *p;
        struct bucketindex {
@@ -2881,17 +2862,14 @@
        struct bucketindex *arTmp, *cmpdata, *lastkept;
        unsigned int i;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       target_hash = HASH_OF(*array);
-       if (!target_hash) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
-               RETURN_FALSE;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == 
FAILURE) {
+               return;
        }
 
+       target_hash = HASH_OF(array);
+
        /* copy the argument array */
-       RETVAL_ZVAL(*array, 1, 0);
+       RETVAL_ZVAL(array, 1, 0);
 
        if (target_hash->nNumOfElements <= 1) { /* nothing to do */
                return;
@@ -2900,6 +2878,7 @@
        /* create and sort array with pointers to the target_hash buckets */
        arTmp = (struct bucketindex *) pemalloc((target_hash->nNumOfElements + 
1) * sizeof(struct bucketindex), target_hash->persistent);
        if (!arTmp) {
+               zval_dtor(return_value);
                RETURN_FALSE;
        }
        for (i = 0, p = target_hash->pListHead; p; i++, p = p->pListNext) {

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to