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

Reply via email to