aboutsummaryrefslogtreecommitdiff
path: root/src/Expression.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Expression.c')
-rw-r--r--src/Expression.c98
1 files changed, 30 insertions, 68 deletions
diff --git a/src/Expression.c b/src/Expression.c
index 4065d90..174698e 100644
--- a/src/Expression.c
+++ b/src/Expression.c
@@ -16,7 +16,7 @@
#include <stdlib.h>
#include <string.h>
-#include "http_Expression.h"
+#include "Expression.h"
static const char *rcsid = "$Header$";
@@ -89,26 +89,19 @@ static void FreeTokens(pToken *list);
@@*/
char *HTTP_ExpressionParse(const char *expression)
{
- pToken *list;
- pToken *temp;
-
- char *buffer;
- int buffer_length;
-
- buffer_length = INITIAL_BUFFER_LENGTH;
-
- buffer = (char *)malloc(buffer_length);
+ int buffer_length = INITIAL_BUFFER_LENGTH;
+ char *buffer = (char *)malloc(buffer_length);
if(buffer)
{
/* Split the list into tokens */
- list = Tokenise(expression);
+ pToken *list = Tokenise(expression);
+ pToken *temp = list;
#ifdef TEST_HTTP_EVALUATE
printtokens(list);
#endif
- temp = list;
/* Convert the list into a string in RPN order */
buffer = RPParse(&temp, buffer, &buffer_length);
@@ -138,14 +131,10 @@ double HTTP_ExpressionEvaluate(char *buffer,
double (*eval)(const char *, void *),
void *data)
{
- char *first;
- char *token;
double stack[MAX_STACK_SIZE];
- int stackpointer;
-
-
- first = buffer;
- stackpointer = 0;
+ int stackpointer = 0;
+ char *first = buffer;
+ char *token;
/* Tokens are seperated by @ signs */
while((token = strtok(first,"@")))
@@ -197,27 +186,19 @@ double HTTP_ExpressionEvaluate(char *buffer,
@@*/
static pToken *Tokenise(const char *expression)
{
- pToken *start;
- pToken *current;
- pToken *new;
-
- const char *tokenstart;
- const char *tokenend;
- const char *position;
-
- start = NULL;
- current = NULL;
+ pToken *start = NULL;
+ pToken *current = NULL;
+ pToken *new = NULL;
- tokenstart = expression;
+ const char *tokenstart = expression;
while(*tokenstart)
{
/* Remove leading whitespace */
for(; *tokenstart == ' ' || *tokenstart == '\t'; tokenstart++);
- tokenend = NULL;
-
- position = tokenstart;
+ const char *tokenend = NULL;
+ const char *position = tokenstart;
for(position=tokenstart; *position && *(position+1); position++)
{
@@ -343,19 +324,11 @@ static pToken *Tokenise(const char *expression)
static char *RPParse(pToken **current, char *stack, int *stacklength)
{
- char *retval;
- pToken *this;
- char *operator;
+ char *retval = stack;
+ pToken *this = *current;
+ char *operator = NULL;
+ int numops = 0;
char *opstack[MAX_OPS];
- int numops;
- int precedence;
-
- numops = 0;
- this = *current;
-
- retval = stack;
-
- operator = NULL;
for(this = *current; this && strcmp(this->token,")"); this = this->next)
{
@@ -379,7 +352,7 @@ static char *RPParse(pToken **current, char *stack, int *stacklength)
if(operator)
{
/* We already have an operator */
- precedence = cmpprecendence(operator, this->token);
+ int precedence = cmpprecendence(operator, this->token);
if(precedence > 0)
{
@@ -446,7 +419,7 @@ static char *RPParse(pToken **current, char *stack, int *stacklength)
@@*/
static double Evaluate(double val1, const char *operator, double val2)
{
- double retval;
+ double retval = 0.0;
if(!strcmp(operator, "+"))
{
@@ -495,7 +468,6 @@ static double Evaluate(double val1, const char *operator, double val2)
else
{
fprintf(stderr, "Unknown operation %s", operator);
- retval = 0;
}
return retval;
@@ -517,14 +489,14 @@ static double Evaluate(double val1, const char *operator, double val2)
@@*/
void FreeTokens(pToken *list)
{
- pToken *token;
- pToken *next;
+ pToken *token = list;
- for(token = list; token; token = next)
+ while( token )
{
- next = token->next;
+ pToken *next = token->next;
free(token->token);
free(token);
+ token = next;
}
}
@@ -545,7 +517,7 @@ void FreeTokens(pToken *list)
@@*/
static int isoperator(const char *token)
{
- int retval;
+ int retval = 0;
if(!strcmp(token, "+") ||
!strcmp(token, "-") ||
@@ -561,10 +533,6 @@ static int isoperator(const char *token)
{
retval = 1;
}
- else
- {
- retval = 0;
- }
return retval;
}
@@ -585,7 +553,6 @@ static int isoperator(const char *token)
@@*/
static int cmpprecendence(const char *op1, const char *op2)
{
- int retval;
const char *op;
int op1prec;
int op2prec;
@@ -628,9 +595,8 @@ static int cmpprecendence(const char *op1, const char *op2)
}
/* Now see which has the higher precedence */
- retval = op2prec-op1prec;
- return retval;
+ return op2prec-op1prec;
}
/*@@
@@ -649,11 +615,7 @@ static int cmpprecendence(const char *op1, const char *op2)
@@*/
static pToken *newtoken(const char *tokenstart, const char *tokenend)
{
- pToken *this;
- const char *position;
- char *newpos;
-
- this = (pToken *)malloc(sizeof(pToken *));
+ pToken *this = (pToken *)malloc(sizeof(pToken *));
if(this)
{
@@ -663,6 +625,8 @@ static pToken *newtoken(const char *tokenstart, const char *tokenend)
this->token = (char *)malloc(tokenend-tokenstart+2);
if(this->token)
{
+ const char *position;
+ char *newpos;
for(position=tokenstart, newpos=this->token;
position <= tokenend;
position++, newpos++)
@@ -813,9 +777,7 @@ static void printstack(char *stack)
double evaluator(const char *token, void *data)
{
- double retval;
-
- retval = strtod(token, NULL);
+ double retval = strtod(token, NULL);
/* fprintf(stderr, "Evaluated '%s' to %f\n", token,retval); */