Annotation of Examples/AppKit/Graph/exprDefs.h, revision 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.