From ee8b36228a882990e752a590e6843bb55daafa29 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Sun, 31 Dec 2006 05:20:18 +0000 Subject: [PATCH] Add power and right/left shift functions (Issue 7959) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49076 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- funcs/func_math.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/funcs/func_math.c b/funcs/func_math.c index 386897dbd8..b5ad4358fb 100644 --- a/funcs/func_math.c +++ b/funcs/func_math.c @@ -31,6 +31,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include #include #include +#include #include #include "asterisk/module.h" @@ -47,6 +48,9 @@ enum TypeOfFunctions { MULTIPLYFUNCTION, SUBTRACTFUNCTION, MODULUSFUNCTION, + POWFUNCTION, + SHLEFTFUNCTION, + SHRIGHTFUNCTION, GTFUNCTION, LTFUNCTION, GTEFUNCTION, @@ -105,12 +109,18 @@ static int math(struct ast_channel *chan, char *cmd, char *parse, } else if ((op = strchr(mvalue1, '%'))) { iaction = MODULUSFUNCTION; *op = '\0'; + } else if ((op = strchr(mvalue1, '^'))) { + iaction = POWFUNCTION; + *op = '\0'; } else if ((op = strchr(mvalue1, '>'))) { iaction = GTFUNCTION; *op = '\0'; if (*(op + 1) == '=') { *++op = '\0'; iaction = GTEFUNCTION; + } else if (*(op + 1) == '>') { + *++op = '\0'; + iaction = SHRIGHTFUNCTION; } } else if ((op = strchr(mvalue1, '<'))) { iaction = LTFUNCTION; @@ -118,6 +128,9 @@ static int math(struct ast_channel *chan, char *cmd, char *parse, if (*(op + 1) == '=') { *++op = '\0'; iaction = LTEFUNCTION; + } else if (*(op + 1) == '<') { + *++op = '\0'; + iaction = SHLEFTFUNCTION; } } else if ((op = strchr(mvalue1, '='))) { *op = '\0'; @@ -192,6 +205,25 @@ static int math(struct ast_channel *chan, char *cmd, char *parse, ftmp = (inum1 % inum2); + break; + } + case POWFUNCTION: + ftmp = pow(fnum1, fnum2); + break; + case SHLEFTFUNCTION: + { + int inum1 = fnum1; + int inum2 = fnum2; + + ftmp = (inum1 << inum2); + break; + } + case SHRIGHTFUNCTION: + { + int inum1 = fnum1; + int inum2 = fnum2; + + ftmp = (inum1 >> inum2); break; } case GTFUNCTION: -- 2.47.2