/* 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 */