Browse Source

Taken from PHP3 source.

experimetnal/RETURN_REF_PATCH
Andrei Zmievski 27 years ago
parent
commit
cb78ebc0de
  1. 1
      ChangeLog
  2. 69
      ext/standard/basic_functions.c
  3. 2
      ext/standard/basic_functions.h

1
ChangeLog

@ -2,6 +2,7 @@ PHP 4.0 CHANGE LOG ChangeLog
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ?? 1999, Version 4.0 Beta 3
- Ported range() and shuffle() from PHP3 to PHP4 (Andrei)
- Fixed header("HTTP/..."); behaviour (Sascha)
- Improved UNIX build system. Now utilizes libtool (Sascha)
- Upgrade some more internal functions to use new Zend function API. (Thies,

69
ext/standard/basic_functions.c

@ -90,6 +90,7 @@ function_entry basic_functions[] = {
PHP_FE(usort, first_arg_force_ref)
PHP_FE(uasort, first_arg_force_ref)
PHP_FE(uksort, first_arg_force_ref)
PHP_FE(shuffle, first_arg_force_ref)
PHP_FE(array_walk, first_arg_force_ref)
PHP_FALIAS(sizeof, count, first_arg_allow_ref)
PHP_FE(count, first_arg_allow_ref)
@ -317,6 +318,7 @@ function_entry basic_functions[] = {
PHP_FE(in_array, NULL)
PHP_FE(extract, NULL)
PHP_FE(compact, NULL)
PHP_FE(range, NULL)
PHP_FE(array_push, first_arg_force_ref)
PHP_FE(array_pop, first_arg_force_ref)
PHP_FE(array_shift, first_arg_force_ref)
@ -2471,6 +2473,73 @@ PHP_FUNCTION(compact)
}
/* }}} */
/* {{{ proto array range(int low, int high)
Create an array containing the range of integers from low to high (inclusive) */
PHP_FUNCTION(range)
{
zval *zlow, *zhigh;
int low, high;
if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&zlow,&zhigh) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long(zlow);
convert_to_long(zhigh);
low = zlow->value.lval;
high = zhigh->value.lval;
/* allocate an array for return */
if (array_init(return_value) == FAILURE) {
RETURN_FALSE;
}
for (; low <= high; low++) {
add_next_index_long(return_value, low);
}
}
/* }}} */
static int array_data_shuffle(const void *a, const void*b) {
return (
/* This is just a little messy. */
#ifdef HAVE_LRAND48
lrand48()
#else
#ifdef HAVE_RANDOM
random()
#else
rand()
#endif
#endif
% 2) ? 1 : -1;
}
/* {{{ proto int shuffle(array array_arg)
Randomly shuffle the contents of an array */
PHP_FUNCTION(shuffle)
{
zval **array;
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &array) == FAILURE) {
WRONG_PARAM_COUNT;
}
if ((*array)->type != IS_ARRAY) {
php_error(E_WARNING, "Wrong datatype in shuffle() call");
return;
}
if (!ParameterPassedByReference(ht,1)) {
php_error(E_WARNING, "Array not passed by reference in call to shuffle()");
return;
}
if (zend_hash_sort((*array)->value.ht, array_data_shuffle, 1) == FAILURE) {
return;
}
RETURN_TRUE;
}
/* }}} */
/* HashTable* _phpi_splice(HashTable *in_hash, int offset, int length,
zval ***list, int list_count, HashTable **removed) */

2
ext/standard/basic_functions.h

@ -122,6 +122,8 @@ PHP_FUNCTION(function_exists);
PHP_FUNCTION(in_array);
PHP_FUNCTION(extract);
PHP_FUNCTION(compact);
PHP_FUNCTION(range);
PHP_FUNCTION(shuffle);
PHP_FUNCTION(array_push);
PHP_FUNCTION(array_pop);
PHP_FUNCTION(array_shift);

Loading…
Cancel
Save