/* File: expreval.h Auth: Brian Allen Vanderburg II Date: Thursday, April 24, 2003 Desc: Main include file for ExprEval library This file is part of ExprEval. */ /* Include once */ #ifndef __BAVII_EXPREVAL_H #define __BAVII_EXPREVAL_H #ifdef __cplusplus extern "C" { #endif /* Define type of data to use */ typedef double EXPRTYPE; /* Defines for various things */ /* Max id size */ #define EXPR_MAXIDENTSIZE 255 /* Error values */ enum { EXPR_ERROR_UNKNOWN = -1, /* Unknown error */ EXPR_ERROR_NOERROR = 0, /* No Error */ EXPR_ERROR_MEMORY, /* Memory allocation failed */ EXPR_ERROR_NULLPOINTER, /* Null pointer passed to function */ EXPR_ERROR_NOTFOUND, /* Item not found in a list */ EXPR_ERROR_UNMATCHEDCOMMENT, /* Unmatched comment tags */ EXPR_ERROR_INVALIDCHAR, /* Invalid characters in expression */ EXPR_ERROR_ALREADYEXISTS, /* An item already called create */ EXPR_ERROR_ALREADYPARSEDBAD, /* Expression parsed already, but unsuccessfully. call free or clear */ EXPR_ERROR_ALREADYPARSEDGOOD, /* Expression parsed already, successfully, call free or clear */ EXPR_ERROR_EMPTYEXPR, /* Empty expression string passed to parse */ EXPR_ERROR_UNMATCHEDPAREN, /* Unmatched parenthesis */ EXPR_ERROR_SYNTAX, /* Syntax error in expression */ EXPR_ERROR_MISSINGSEMICOLON, /* Missing semicolon at end of expression */ EXPR_ERROR_BADIDENTIFIER, /* Identifier was to big or not formed right */ EXPR_ERROR_NOSUCHFUNCTION, /* Function does not exist in function list */ EXPR_ERROR_BADNUMBERARGUMENTS, /* Bad number of arguments in a function call */ EXPR_ERROR_BADEXPR, /* This is a bad expression to evaluate. It has not been parsed or has unsuccessfully */ EXPR_ERROR_UNABLETOASSIGN, /* Unable to do an assignment, maybe no variable list */ EXPR_ERROR_DIVBYZERO, /* Attempted a division by zero */ EXPR_ERROR_NOVARLIST, /* No variable list found but one is needed */ EXPR_ERROR_BREAK, /* Expression was broken by break function */ EXPR_ERROR_CONSTANTASSIGN, /* Assignment to a constant */ EXPR_ERROR_REFCONSTANT, /* Constant used as a reference parameter */ EXPR_ERROR_OUTOFRANGE, /* A bad value was passed to a function */ EXPR_ERROR_USER /* Custom errors should be larger than this */ }; /* Macros */ /* Forward declarations */ typedef struct _exprNode exprNode; typedef struct _exprFuncList exprFuncList; typedef struct _exprValList exprValList; typedef struct _exprObj exprObj; /* Function types */ typedef int (*exprFuncType)(exprObj *obj, exprNode *nodes, int nodecount, EXPRTYPE **refs, int refcount, EXPRTYPE *val); typedef int (*exprBreakFuncType)(exprObj *obj); /* Functions */ /* Version information function */ void exprGetVersion(int *major, int *minor); /* Functions for function lists */ int exprFuncListCreate(exprFuncList **flist); int exprFuncListAdd(exprFuncList *flist, char *name, exprFuncType ptr, int min, int max, int refmin, int refmax); int exprFuncListFree(exprFuncList *flist); int exprFuncListClear(exprFuncList *flist); int exprFuncListInit(exprFuncList *flist); /* Functions for value lists */ int exprValListCreate(exprValList **vlist); int exprValListAdd(exprValList *vlist, char *name, EXPRTYPE val); int exprValListSet(exprValList *vlist, char *name, EXPRTYPE val); int exprValListGet(exprValList *vlist, char *name, EXPRTYPE *val); int exprValListAddAddress(exprValList *vlist, char *name, EXPRTYPE *addr); int exprValListGetAddress(exprValList *vlist, char *name, EXPRTYPE **addr); void *exprValListGetNext(exprValList *vlist, char **name, EXPRTYPE *value, EXPRTYPE** addr, void *cookie); int exprValListFree(exprValList *vlist); int exprValListClear(exprValList *vlist); int exprValListInit(exprValList *vlist); /* Functions for expression objects */ int exprCreate(exprObj **obj, exprFuncList *flist, exprValList *vlist, exprValList *clist, exprBreakFuncType breaker, void *userdata); int exprFree(exprObj *obj); int exprClear(exprObj *obj); int exprParse(exprObj *obj, char *expr); int exprEval(exprObj *obj, EXPRTYPE *val); int exprEvalNode(exprObj *obj, exprNode *nodes, int curnode, EXPRTYPE *val); exprFuncList *exprGetFuncList(exprObj *obj); exprValList *exprGetVarList(exprObj *obj); exprValList *exprGetConstList(exprObj *obj); exprBreakFuncType exprGetBreakFunc(exprObj *obj); int exprGetBreakResult(exprObj *obj); void* exprGetUserData(exprObj *obj); void exprSetUserData(exprObj *obj, void *userdata); void exprSetBreakCount(exprObj *obj, int count); void exprGetErrorPosition(exprObj *obj, int *start, int *end); /* Other useful routines */ int exprValidIdent(char *name); /* Name mangling */ #ifdef __cplusplus } #endif #endif /* __BAVII_EXPREVAL_H */