This is exprDefs.h in view mode; [Download] [Up]
/* exprDefs.h Private defs used by Expression and the parsing modules. */ #import "Expression.h" /* a type of function term we know how to parse */ typedef struct _Function { char *name; int minArgs; int maxArgs; EXPTermEvalFunc *evalFunc; } Function; typedef enum { /* various types of terms we know about */ constantTerm = 1, varTerm = 2, vectorTerm = 4, binOpTerm = 8, funcTerm = 16 } TermTag; /* a term of an expression. Note that even if a constant is an integer, we store it as a float. This ensures that divide by zero results in NaN ("not a number", a special floating point value) instead of a coredump due to an arithmetic exception. */ typedef struct _EXPTerm { TermTag tag; /* type of term */ union { struct { BOOL isInt; /* is this an integer? */ float val; /* the constant value */ } constant; struct { char *name; /* name of var */ float val; /* value of var */ } var; struct { BOOL hasRange; /* do we calc the vector or the range? */ BOOL changed; /* do we need to recalc? */ short dimension; /* dimension within which we vary */ char *name; /* name of var */ int resolution; /* last resolution we calc'ed at */ float min; /* range of values */ float max; float *vals; /* list of values */ } vector; struct { char op; /* char representing op (e.g. '+', '-',...) */ } binOp; struct { Function *type; /* info for this type of function */ } func; } data; int numSubterms; /* number of subTerms from parse */ struct _EXPTerm *subterms[1]; /* the subTerms */ } Term; typedef struct _TermList { /* a list of terms */ int num; Term *terms[1]; } TermList; /* declaration of functions shared between the parsing modules */ extern Term *_EXPAllocTerm(NXZone *zone, TermTag tag, int numSubterms, ...); extern void _EXPFreeTerm(void *info, Term *data); extern BOOL _EXPParseExpression(const char *text, NXHashTable *validTerms, Term **parseTree, NXHashTable *varTerms, NXZone *zone); extern void _EXPPrepareToScan(const char *text);
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.