Changeset 47 for trunk/orca
- Timestamp:
- 02/13/06 18:25:35 (3 years ago)
- Files:
-
- 1 modified
-
trunk/orca/op.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/orca/op.c
r42 r47 507 507 static int compareValue( const OValue* a, const OValue* b ) 508 508 { 509 if( a->type == OT_INTEGER)510 { 511 if( b->type == OT_INTEGER)512 { 513 if( a->integer > b->integer)509 if( orIs(a, OT_INTEGER) ) 510 { 511 if( orIs(b, OT_INTEGER) ) 512 { 513 if( orInt(a) > orInt(b) ) 514 514 return CMP_GREATER; 515 if( a->integer < b->integer)515 if( orInt(a) < orInt(b) ) 516 516 return CMP_LESS; 517 517 return CMP_EQUAL; 518 518 } 519 else if( b->type == OT_DECIMAL)520 { 521 double da = (double) a->integer;522 if( da > b->num.decimal)519 else if( orIs(b, OT_DECIMAL) ) 520 { 521 double da = (double) orInt(a); 522 if( da > orDecimal(b) ) 523 523 return CMP_GREATER; 524 if( da < b->num.decimal)524 if( da < orDecimal(b) ) 525 525 return CMP_LESS; 526 526 return CMP_EQUAL; … … 528 528 return CMP_ERROR_B; 529 529 } 530 else if( a->type == OT_DECIMAL)531 { 532 if( b->type == OT_INTEGER)533 { 534 double db = (double) b->integer;535 if( a->num.decimal> db )530 else if( orIs(a, OT_DECIMAL) ) 531 { 532 if( orIs(b, OT_INTEGER) ) 533 { 534 double db = (double) orInt(b); 535 if( orDecimal(a) > db ) 536 536 return CMP_GREATER; 537 if( a->num.decimal< db )537 if( orDecimal(a) < db ) 538 538 return CMP_LESS; 539 539 return CMP_EQUAL; 540 540 } 541 else if( b->type == OT_DECIMAL)542 { 543 if( a->num.decimal > b->num.decimal)541 else if( orIs(b, OT_DECIMAL) ) 542 { 543 if( orDecimal(a) > orDecimal(b) ) 544 544 return CMP_GREATER; 545 if( a->num.decimal < b->num.decimal)545 if( orDecimal(a) < orDecimal(b) ) 546 546 return CMP_LESS; 547 547 return CMP_EQUAL; … … 549 549 return CMP_ERROR_B; 550 550 } 551 else if( a->type == OT_TUPLE ) 552 { 553 if( b->type == OT_TUPLE ) 554 { 555 int i, argc; 556 argc = a->argc > b->argc ? a->argc : b->argc; 557 for( i = 0; i < argc; i++ ) 558 { 559 if ( a->tuple[i] > b->tuple[i] ) 551 else if( orIs(a, OT_TUPLE) ) 552 { 553 if( orIs(b, OT_TUPLE) ) 554 { 555 int i, len; 556 len = orTupleLen(a); 557 if( len < orTupleLen(b) ) 558 return CMP_LESS; 559 if( len > orTupleLen(b) ) 560 return CMP_GREATER; 561 for( i = 0; i < len; i++ ) 562 { 563 if( a->tuple[i] > b->tuple[i] ) 560 564 return CMP_GREATER; 561 if ( a->tuple[i] < b->tuple[i] )565 if( a->tuple[i] < b->tuple[i] ) 562 566 return CMP_LESS; 563 567 } 564 return CMP_EQUAL; ;568 return CMP_EQUAL; 565 569 } 566 570 return CMP_ERROR_B; … … 718 722 719 723 case OT_TUPLE: 720 logic = compareValue( a, b ); // tupleSame( a, b );724 logic = (compareValue( a, b ) == CMP_EQUAL) ? 1 : 0; 721 725 break; 722 726
