From 80a49958532b598dfc95d985dc84fae91d2ae293 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 17 Jan 2005 18:25:32 +0000 Subject: [PATCH] simplify benchmark Originally committed as revision 3844 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/eval.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libavcodec/eval.c b/libavcodec/eval.c index 4e1e8a3a34..3307815817 100644 --- a/libavcodec/eval.c +++ b/libavcodec/eval.c @@ -141,15 +141,11 @@ static double evalPrimary(Parser *p){ return d; } - + static double evalPow(Parser *p){ - if(p->s[0]=='+') p->s++; - - if(p->s[0]=='-'){ - p->s++; - return -evalPrimary(p); - }else - return evalPrimary(p); + int sign= (*p->s == '+') - (*p->s == '-'); + p->s += sign&1; + return (sign|1) * evalPrimary(p); } static double evalFactor(Parser *p){ @@ -171,17 +167,15 @@ static double evalTerm(Parser *p){ } static double evalExpression(Parser *p){ - double ret; + double ret= 0; if(p->stack_index <= 0) //protect against stack overflows return NAN; p->stack_index--; - ret= evalTerm(p); - while(p->s[0]=='+' || p->s[0]=='-'){ - if(*p->s++ == '+') ret+= evalTerm(p); - else ret-= evalTerm(p); - } + do{ + ret += evalTerm(p); + }while(*p->s == '+' || *p->s == '-'); p->stack_index++; @@ -220,6 +214,13 @@ static const char *const_names[]={ 0 }; main(){ + int i; printf("%f == 12.7\n", ff_eval("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL)); + + for(i=0; i<1050; i++){ + START_TIMER + ff_eval("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL); + STOP_TIMER("ff_eval") + } } #endif