andrey Sat Jul 24 05:25:52 2004 EDT
Modified files:
/php-src/ext/standard array.c
Log:
make behavior a bit field
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.267&r2=1.268&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.267 php-src/ext/standard/array.c:1.268
--- php-src/ext/standard/array.c:1.267 Wed Jul 21 17:17:56 2004
+++ php-src/ext/standard/array.c Sat Jul 24 05:25:52 2004
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.267 2004/07/21 21:17:56 andrey Exp $ */
+/* $Id: array.c,v 1.268 2004/07/24 09:25:52 andrey Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -75,17 +75,17 @@
#define COUNT_NORMAL 0
#define COUNT_RECURSIVE 1
-#define DIFF_NORMAL 0
-#define DIFF_ASSOC 1
+#define DIFF_NORMAL 1
#define DIFF_KEY 2
+#define DIFF_ASSOC 6
#define DIFF_COMP_DATA_INTERNAL 0
#define DIFF_COMP_DATA_USER 1
#define DIFF_COMP_KEY_INTERNAL 0
#define DIFF_COMP_KEY_USER 1
-#define INTERSECT_NORMAL 0
-#define INTERSECT_ASSOC 1
+#define INTERSECT_NORMAL 1
#define INTERSECT_KEY 2
+#define INTERSECT_ASSOC 6
#define INTERSECT_COMP_DATA_INTERNAL 0
#define INTERSECT_COMP_DATA_USER 1
#define INTERSECT_COMP_KEY_INTERNAL 0
@@ -2799,8 +2799,7 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type
is %d. This should never happen. Please report as a bug", data_compare_type);
return;
}
- } else if ((behavior == INTERSECT_ASSOC)
- ||(behavior == INTERSECT_KEY)) {
+ } else if (behavior & INTERSECT_ASSOC) { /* triggered also when INTERSECT_KEY
*/
/*
INTERSECT_KEY is subset of INTERSECT_ASSOC. When having the
former
no comparison of the data is done (part of INTERSECT_ASSOC)
@@ -2917,7 +2916,7 @@
*list = NULL;
if (behavior == INTERSECT_NORMAL) {
zend_qsort((void *) lists[i], hash->nNumOfElements,
sizeof(Bucket *), intersect_data_compare_func TSRMLS_CC);
- } else if ((behavior == INTERSECT_ASSOC) || (behavior ==
INTERSECT_KEY)) {
+ } else if (behavior & INTERSECT_ASSOC) { /* triggered also when
INTERSECT_KEY */
zend_qsort((void *) lists[i], hash->nNumOfElements,
sizeof(Bucket *), intersect_key_compare_func TSRMLS_CC);
}
}
@@ -2926,15 +2925,14 @@
*return_value = **args[0];
zval_copy_ctor(return_value);
- if (behavior == INTERSECT_NORMAL && data_compare_type ==
INTERSECT_COMP_DATA_USER) {
+ if ((behavior & INTERSECT_NORMAL) && data_compare_type ==
INTERSECT_COMP_DATA_USER) {
/* array_uintersect() */
BG(user_compare_func_name) = args[arr_argc];
}
/* go through the lists and look for common values */
while (*ptrs[0]) {
- if ((behavior == INTERSECT_ASSOC
- || behavior == INTERSECT_KEY)
+ if ((behavior & INTERSECT_ASSOC) /* triggered also when INTERSECT_KEY
*/
&&
key_compare_type == INTERSECT_COMP_KEY_USER) {
@@ -2942,15 +2940,15 @@
}
for (i = 1; i < arr_argc; i++) {
- if (behavior == INTERSECT_NORMAL) {
+ if (behavior & INTERSECT_NORMAL) {
while (*ptrs[i] && (0 < (c =
intersect_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
ptrs[i]++;
}
- } else if (behavior == INTERSECT_ASSOC || behavior ==
INTERSECT_KEY) {
+ } else if (behavior & INTERSECT_ASSOC) { /* triggered also
when INTERSECT_KEY */
while (*ptrs[i] && (0 < (c =
intersect_key_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
ptrs[i]++;
}
- if ((!c && *ptrs[i]) && (behavior == INTERSECT_ASSOC))
{
+ if ((!c && *ptrs[i]) && (behavior == INTERSECT_ASSOC))
{ /* only when INTERSECT_ASSOC */
/*
this means that ptrs[i] is not NULL so
we can compare
and "c==0" is from last operation
@@ -3010,7 +3008,7 @@
if (0 <= intersect_data_compare_func(ptrs[0],
ptrs[i] TSRMLS_CC)) {
break;
}
- } else if (behavior == INTERSECT_ASSOC || behavior ==
INTERSECT_KEY) {
+ } else if (behavior & INTERSECT_ASSOC) { /* triggered
also when INTERSECT_KEY */
/* no need of looping because indexes are
unique */
break;
}
@@ -3026,7 +3024,7 @@
if (intersect_data_compare_func(ptrs[0]-1,
ptrs[0] TSRMLS_CC)) {
break;
}
- } else if (behavior == INTERSECT_ASSOC || behavior ==
INTERSECT_KEY) {
+ } else if (behavior & INTERSECT_ASSOC) { /* triggered
also when INTERSECT_KEY */
/* no need of looping because indexes are
unique */
break;
}
@@ -3182,7 +3180,7 @@
php_error_docref(NULL TSRMLS_CC, E_WARNING, "data_compare_type
is %d. This should never happen. Please report as a bug", data_compare_type);
return;
}
- } else if ((behavior == DIFF_ASSOC) || (behavior == DIFF_KEY)) {
+ } else if (behavior & DIFF_ASSOC) { /* triggered also if DIFF_KEY */
/*
DIFF_KEY is subset of DIFF_ASSOC. When having the former
no comparison of the data is done (part of DIFF_ASSOC)
@@ -3299,7 +3297,7 @@
*list = NULL;
if (behavior == DIFF_NORMAL) {
zend_qsort((void *) lists[i], hash->nNumOfElements,
sizeof(Bucket *), diff_data_compare_func TSRMLS_CC);
- } else if (behavior == DIFF_ASSOC || behavior == DIFF_KEY) {
+ } else if (behavior & DIFF_ASSOC) { /* triggered also when DIFF_KEY */
zend_qsort((void *) lists[i], hash->nNumOfElements,
sizeof(Bucket *), diff_key_compare_func TSRMLS_CC);
}
}
@@ -3315,7 +3313,7 @@
/* go through the lists and look for values of ptr[0] that are not in the
others */
while (*ptrs[0]) {
- if ((behavior == DIFF_ASSOC || behavior == DIFF_KEY)
+ if ((behavior & DIFF_ASSOC) /* triggered also when DIFF_KEY */
&&
key_compare_type == DIFF_COMP_KEY_USER) {
@@ -3327,7 +3325,7 @@
while (*ptrs[i] && (0 < (c =
diff_data_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
ptrs[i]++;
}
- } else if (behavior == DIFF_ASSOC || behavior == DIFF_KEY) {
+ } else if (behavior & DIFF_ASSOC) { /* triggered also when
DIFF_KEY */
while (*ptrs[i] && (0 < (c =
diff_key_compare_func(ptrs[0], ptrs[i] TSRMLS_CC)))) {
ptrs[i]++;
}
@@ -3338,7 +3336,7 @@
ptrs[i]++;
}
break;
- } else if (behavior == DIFF_ASSOC) {
+ } else if (behavior == DIFF_ASSOC) { /* only when
DIFF_ASSOC */
/*
In this branch is execute only when
DIFF_ASSOC. If behavior == DIFF_KEY
data comparison is not needed -
skipped.
@@ -3361,7 +3359,7 @@
*/
}
}
- } else if (behavior == DIFF_KEY) {
+ } else if (behavior == DIFF_KEY) { /* only when
DIFF_KEY */
/*
the behavior here differs from
INTERSECT_KEY in php_intersect
since in the "diff" case we have to
remove the entry from
@@ -3389,7 +3387,7 @@
if (diff_data_compare_func(ptrs[0] - 1,
ptrs[0] TSRMLS_CC)) {
break;
}
- } else if (behavior == DIFF_ASSOC || behavior ==
DIFF_KEY) {
+ } else if (behavior & DIFF_ASSOC) { /* triggered also
when DIFF_KEY */
/* in this case no array_key_compare is needed
*/
break;
}
@@ -3405,7 +3403,7 @@
if (diff_data_compare_func(ptrs[0]-1, ptrs[0]
TSRMLS_CC)) {
break;
}
- } else if (behavior == DIFF_ASSOC || behavior ==
DIFF_KEY) {
+ } else if (behavior & DIFF_ASSOC) { /* triggered also
when DIFF_KEY */
/* in this case no array_key_compare is needed
*/
break;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php