]> granicus.if.org Git - php/commitdiff
- Add support for string_compare_function() and number_compare_function().
authorAndi Gutmans <andi@php.net>
Wed, 17 May 2000 18:55:22 +0000 (18:55 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 17 May 2000 18:55:22 +0000 (18:55 +0000)
  UNTESTED!

Zend/zend_operators.c
Zend/zend_operators.h

index f8357a900d514740f705848d51103964555c1fb1..8707f3f29b29835f83ed83642f070f48fcb275b1 100644 (file)
@@ -948,6 +948,52 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2)
 }
 
 
+ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2)
+{
+       zval op1_copy, op2_copy;
+       int use_copy1, use_copy2;
+
+       zend_make_printable_zval(op1, &op1_copy, &use_copy1);
+       zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+
+       if (use_copy1) {
+               op1 = &op1_copy;
+       }
+       if (use_copy2) {
+               op2 = &op2_copy;
+       }
+
+       result->value.lval = zend_binary_zval_strcmp(op1, op2);
+       result->type = IS_LONG;
+
+       if (use_copy1) {
+               zval_dtor(op1);
+       }
+       if (use_copy2) {
+               zval_dtor(op2);
+       }
+       return SUCCESS;
+}
+
+ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2)
+{
+       zval op1_copy, op2_copy;
+
+       op1_copy = *op1;
+       zval_copy_ctor(&op1_copy);
+
+       op2_copy = *op2;
+       zval_copy_ctor(&op2_copy);
+
+       convert_to_double(&op1_copy);
+       convert_to_double(&op2_copy);
+
+       result->value.lval = NORMALIZE_BOOL(op2_copy.value.dval-op1_copy.value.dval);
+       result->type = IS_LONG;
+
+       return SUCCESS;
+}
+
 ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
 {
        zval op1_copy, op2_copy;
index 8a7e45bc39ac2f8a28166fc9f2b89ec25521ad0f..9e1ced2c701cdd72b058d7f854607b5e1b4c94f3 100644 (file)
@@ -69,6 +69,8 @@ END_EXTERN_C()
 
 ZEND_API int zval_is_true(zval *op);
 ZEND_API int compare_function(zval *result, zval *op1, zval *op2);
+ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2);
+ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2);
 
 ZEND_API void zend_str_tolower(char *str, unsigned int length);
 ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);