Annotation of Examples/AppKit/Graph/exprDefs.h, revision 1.1.1.1

1.1       root        1: 
                      2: /*
                      3:     exprDefs.h
                      4: 
                      5:     Private defs used by Expression and the parsing modules.
                      6: */
                      7: 
                      8: #import "Expression.h"
                      9: 
                     10: /* a type of function term we know how to parse */
                     11: typedef struct _Function {
                     12:     char *name;
                     13:     int minArgs;
                     14:     int maxArgs;
                     15:     EXPTermEvalFunc *evalFunc;
                     16: } Function;
                     17: 
                     18: typedef enum {         /* various types of terms we know about */
                     19:     constantTerm = 1,
                     20:     varTerm = 2,
                     21:     vectorTerm = 4,
                     22:     binOpTerm = 8,
                     23:     funcTerm = 16
                     24: } TermTag;
                     25: 
                     26: /* a term of an expression.
                     27:    Note that even if a constant is an integer, we store it as a float.  This
                     28:    ensures that divide by zero results in NaN ("not a number", a special
                     29:    floating point value) instead of a coredump due to an arithmetic exception.
                     30:  */
                     31: typedef struct _EXPTerm {
                     32:     TermTag tag;               /* type of term */
                     33:     union {
                     34:        struct {
                     35:            BOOL isInt;         /* is this an integer? */
                     36:            float val;          /* the constant value */
                     37:        } constant;
                     38:        struct {
                     39:            char *name;         /* name of var */
                     40:            float val;          /* value of var */
                     41:        } var;
                     42:        struct {
                     43:            BOOL hasRange;      /* do we calc the vector or the range? */
                     44:            BOOL changed;       /* do we need to recalc? */
                     45:            short dimension;    /* dimension within which we vary */
                     46:            char *name;         /* name of var */
                     47:            int resolution;     /* last resolution we calc'ed at */
                     48:            float min;          /* range of values */
                     49:            float max;
                     50:            float *vals;        /* list of values */
                     51:        } vector;
                     52:        struct {
                     53:            char op;            /* char representing op (e.g. '+', '-',...) */ 
                     54:        } binOp;
                     55:        struct {
                     56:            Function *type;     /* info for this type of function */
                     57:        } func;
                     58:     } data;
                     59:     int numSubterms;           /* number of subTerms from parse */
                     60:     struct _EXPTerm *subterms[1];      /* the subTerms */
                     61: } Term;
                     62: 
                     63: 
                     64: typedef struct _TermList {     /* a list of terms */
                     65:     int num;
                     66:     Term *terms[1];
                     67: } TermList;
                     68: 
                     69: 
                     70: /* declaration of functions shared between the parsing modules */
                     71: 
                     72: extern Term *_EXPAllocTerm(NXZone *zone, TermTag tag, int numSubterms, ...);
                     73: extern void _EXPFreeTerm(void *info, Term *data);
                     74: extern BOOL _EXPParseExpression(const char *text, NXHashTable *validTerms, Term **parseTree, NXHashTable *varTerms, NXZone *zone);
                     75: extern void _EXPPrepareToScan(const char *text);

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.