home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff280.lzh / Graph / object / function.h < prev    next >
C/C++ Source or Header  |  1989-11-20  |  3KB  |  84 lines

  1. /*
  2.  *                 GRAPH, Version 1.00 - 4 August 1989
  3.  *
  4.  *            Copyright 1989, David Gay. All Rights Reserved.
  5.  *            This software is freely redistrubatable.
  6.  */
  7.  
  8. /* class function, inherits from class object. The actual function types are su
  9. b-classes of this one */
  10. #ifndef FUNCTION_H
  11. #define FUNCTION_H
  12.  
  13. #include "list.h"
  14. #include "object.h"
  15. #include "graph.h"
  16. #include "user/eval.h"
  17. #include <stddef.h>
  18.  
  19. #define MAXERROR 0.2 /* For discontinuities */
  20. #define MAXITER 4    /* In improvement algo */
  21. #define FLAT 2       /* number of pixels allowed in "flat" discontinuities */
  22. #define DEFSTEPS 100 /* Default number of steps */
  23. #define FDIST 5      /* Max (y) distance for function select */
  24.  
  25. /* class function (inherited from class object). Fields are public. */
  26. struct function {
  27.     struct object o;
  28.     int (*calcf)(struct function *this, int allow_mes); /* Recalculate values o
  29. f points */
  30.     int (*save)(struct function *this, FILE *f);        /* Save function specif
  31. ic info. to file */
  32.  
  33.     /* Information global to all types of functions */
  34.     char vname[VARLEN]; /* name of variable */
  35.     double min, max;    /* Limits for variable */
  36.     int steps;          /* Number of points to calculate */
  37.     BYTE colour;        /* Colour in which to draw */
  38.     int showdisc : 1;   /* Show discontinuities ? */
  39.     int nicedisc : 1;   /* Allow "nice" discontinuities */
  40.  
  41.     /* State info */
  42.     int calc : 1;       /* Points calculated ? */
  43.     int selected : 1;   /* function selected ? */
  44.     variable var;       /* Actual variable */
  45.     var_list used;      /* Vars this function depends on */
  46.     list pts;           /* Points composing this, different structure for each
  47. type of function */
  48.     size_t sizept;      /* Size of one point (for delete) */
  49. };
  50.  
  51. /* Flags for point state */
  52. #define EXISTS 1  /* Function is defined here */
  53. #define DISC 2    /* This is a discontinuity */
  54. #define OK 4      /* All is well */
  55.  
  56. /* The base class for a point */
  57. struct point {
  58.     node node;
  59.     char state;
  60.     double x, y;
  61. };
  62.  
  63. typedef struct point point;
  64.  
  65. /* Create/load the various types of function */
  66. struct f_of_x *new_f_of_x(struct graph *g, char *name);
  67. struct x_y *new_x_y(struct graph *g, char *name);
  68. struct r_of_t *new_r_of_t(struct graph *g, char *name);
  69. struct r_t *new_r_t(struct graph *g, char *name);
  70. struct f_of_x *load_f_of_x(struct graph *g, FILE *f);
  71. struct x_y *load_x_y(struct graph *g, FILE *f);
  72. struct r_of_t *load_r_of_t(struct graph *g, FILE *f);
  73. struct r_t *load_r_t(struct graph *g, FILE *f);
  74.  
  75. /* A few useful functions ... */
  76. void display_function(struct function *this); /* Draws a function */
  77. void init_function(struct function *this, struct graph *g, char *name); /* Stan
  78. dard init. */
  79. int load_rest(struct function *this, FILE *f); /* Load public part of function
  80. */
  81.  
  82. #endif
  83.  
  84.