From c6b49f9098fb6c9816202e8d465c342788736af5 Mon Sep 17 00:00:00 2001 From: Wolfgang Pechlaner Date: Sun, 4 Sep 2011 14:40:25 +0200 Subject: BITxxx functions according to ODF 1.2 OpenFormula Implements BITAND, BITOR, BITXOR, BITLSHIFT and BITRSHIFT as specified by OASIS OpenDocument Format 1.2 OpenFormula / ODFF. Changes made by the committer: * Original submission added the new functions to the Logical group, that group has only functions though that return a logical value 1/0/true/false. ODFF groups them under "Bit operation functions" that currently is not available in Calc. Added the functions to the Mathematical group instead. * Changed descriptions of functions in the Function Wizard. * One sal_uInt64 constant instead of several identical literal 281474976710655 values. * Replaced 'or' operators with || * Don't push two return values, if PushIllegalArgument() was used don't use PushDouble() thereafter. * Treat double values with ::rtl::math::approxFloor() to obtain integer values. * For BITLSHIFT and BITRSHIFT implemented a different algorithm following the ODFF specification that allows larger shift values. * Use our block braces style, respectively don't use block braces for one-line if-statements. * Fixed indentation levels. * Adapted RTL_LOGFILE_CONTEXT_AUTHOR to say "pechlaner". Credit to whom credit is due ;-) --- formula/inc/formula/compiler.hrc | 10 +++++++--- formula/inc/formula/opcode.hxx | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'formula/inc') diff --git a/formula/inc/formula/compiler.hrc b/formula/inc/formula/compiler.hrc index 5c58d9d3e068..a7b5cd808f88 100755 --- a/formula/inc/formula/compiler.hrc +++ b/formula/inc/formula/compiler.hrc @@ -392,9 +392,13 @@ #define SC_OPCODE_NUMBERVALUE 392 #define SC_OPCODE_CHISQ_DIST 393 #define SC_OPCODE_CHISQ_INV 394 -#define SC_OPCODE_STOP_2_PAR 395 - -#define SC_OPCODE_LAST_OPCODE_ID 394 /* last OpCode */ +#define SC_OPCODE_BITAND 395 +#define SC_OPCODE_BITOR 396 +#define SC_OPCODE_BITXOR 397 +#define SC_OPCODE_BITRSHIFT 398 +#define SC_OPCODE_BITLSHIFT 399 +#define SC_OPCODE_STOP_2_PAR 400 +#define SC_OPCODE_LAST_OPCODE_ID 399 /* last OpCode */ /*** Interna ***/ #define SC_OPCODE_INTERNAL_BEGIN 9999 diff --git a/formula/inc/formula/opcode.hxx b/formula/inc/formula/opcode.hxx index fc9a9b7cf525..571e1b00c247 100644 --- a/formula/inc/formula/opcode.hxx +++ b/formula/inc/formula/opcode.hxx @@ -365,6 +365,12 @@ enum OpCodeEnum ocTableOp = SC_OPCODE_TABLE_OP, ocBetaDist = SC_OPCODE_BETA_DIST, ocBetaInv = SC_OPCODE_BETA_INV, + // Bit functions + ocBitAnd = SC_OPCODE_BITAND, + ocBitOr = SC_OPCODE_BITOR, + ocBitXor = SC_OPCODE_BITXOR, + ocBitRshift = SC_OPCODE_BITRSHIFT, + ocBitLshift = SC_OPCODE_BITLSHIFT, // miscellaneous ocWeek = SC_OPCODE_WEEK, ocGetDayOfWeek = SC_OPCODE_GET_DAY_OF_WEEK, -- cgit