ftp.nice.ch/pub/next/graphics/3d/NXplot3d.3.2.NIHS.bs.tar.gz#/NXplot3d.3.2/Source/exprDefs.h

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.