home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / src / tree-plot.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  5KB  |  225 lines

  1. // tree-plot.h                                         -*- C++ -*-
  2. /*
  3.  
  4. Copyright (C) 1992, 1993, 1994, 1995 John W. Eaton
  5.  
  6. This file is part of Octave.
  7.  
  8. Octave is free software; you can redistribute it and/or modify it
  9. under the terms of the GNU General Public License as published by the
  10. Free Software Foundation; either version 2, or (at your option) any
  11. later version.
  12.  
  13. Octave is distributed in the hope that it will be useful, but WITHOUT
  14. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  15. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  16. for more details.
  17.  
  18. You should have received a copy of the GNU General Public License
  19. along with Octave; see the file COPYING.  If not, write to the Free
  20. Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. */
  23.  
  24. #if !defined (octave_tree_plot_h)
  25. #define octave_tree_plot_h 1
  26.  
  27. #include <iostream.h>
  28.  
  29. class tree_command;
  30. class tree_plot_command;
  31. class plot_limits;
  32. class plot_range;
  33. class subplot_using;
  34. class subplot_style;
  35. class subplot;
  36. class subplot_list;
  37.  
  38. #include <SLList.h>
  39.  
  40. #include "dColVector.h"
  41.  
  42. #include "idx-vector.h"
  43. #include "tree-cmd.h"
  44. #include "tree-expr.h"
  45.  
  46. class
  47. tree_plot_command : public tree_command
  48. {
  49. public:
  50.   tree_plot_command (void);
  51.   tree_plot_command (subplot_list *plt, int nd);
  52.   tree_plot_command (subplot_list *plt, plot_limits *rng, int nd);
  53.  
  54.   ~tree_plot_command (void);
  55.  
  56.   void eval (void);
  57.  
  58.   void print_code (ostream& os);
  59.  
  60. private:
  61.   int ndim;
  62.   plot_limits *range;
  63.   subplot_list *plot_list;
  64. };
  65.  
  66. class
  67. plot_limits : public tree_print_code
  68. {
  69. public:
  70.   plot_limits (void);
  71.   plot_limits (plot_range *xlim);
  72.   plot_limits (plot_range *xlim, plot_range *ylim);
  73.   plot_limits (plot_range *xlim, plot_range *ylim,
  74.             plot_range *zlim);
  75.  
  76.   ~plot_limits (void);
  77.  
  78.   void print (int print, ostrstream& plot_buf);
  79.  
  80.   void print_code (ostream& os);
  81.  
  82. private:
  83.   plot_range *x_range;
  84.   plot_range *y_range;
  85.   plot_range *z_range;
  86. };
  87.  
  88. class
  89. plot_range : public tree_print_code
  90. {
  91. public:
  92.   plot_range (void);
  93.   plot_range (tree_expression *l, tree_expression *u);
  94.  
  95.   ~plot_range (void);
  96.  
  97.   void print (ostrstream& plot_buf);
  98.  
  99.   void print_code (ostream& os);
  100.  
  101. private:
  102.   tree_expression *lower;
  103.   tree_expression *upper;
  104. };
  105.  
  106. class
  107. subplot_using : public tree_print_code
  108. {
  109. public:
  110.   subplot_using (void);
  111.   subplot_using (tree_expression *fmt);
  112.  
  113.   ~subplot_using (void);
  114.  
  115.   subplot_using *set_format (tree_expression *fmt);
  116.  
  117.   subplot_using *add_qualifier (tree_expression *t);
  118.  
  119.   int eval (int ndim, int n_max);
  120.  
  121.   ColumnVector values (int ndim, int n_max = 0);
  122.  
  123.   int print (int ndim, int n_max, ostrstream& plot_buf);
  124.  
  125.   void print_code (ostream& os);
  126.  
  127. private:
  128.   int qualifier_count;
  129.   tree_expression *x[4];
  130.   tree_expression *scanf_fmt;
  131.   int have_values;
  132.   ColumnVector val;
  133. };
  134.  
  135. class
  136. subplot_style : public tree_print_code
  137. {
  138. public:
  139.   subplot_style (void);
  140.   subplot_style (char *s);
  141.   subplot_style (char *s, tree_expression *lt);
  142.   subplot_style (char *s, tree_expression *lt, tree_expression *pt);
  143.  
  144.   ~subplot_style (void);
  145.  
  146.   int print (ostrstream& plot_buf);
  147.  
  148.   int errorbars (void);
  149.  
  150.   void print_code (ostream& os);
  151.  
  152. private:
  153.   char *style;
  154.   tree_expression *linetype;
  155.   tree_expression *pointtype;
  156. };
  157.  
  158. class
  159. subplot : public tree_print_code
  160. {
  161. public:
  162.   subplot (void);
  163.   subplot (tree_expression *data);
  164.   subplot (subplot_using *u, tree_expression *t, subplot_style *s);
  165.  
  166.   ~subplot (void);
  167.  
  168.   void set_data (tree_expression *data);
  169.  
  170.   tree_constant extract_plot_data (int ndim, tree_constant& data);
  171.  
  172.   int handle_plot_data (int ndim, ostrstream& plot_buf);
  173.  
  174.   int print (int ndim, ostrstream& plot_buf);
  175.  
  176.   void print_code (ostream& os);
  177.  
  178. private:
  179.   tree_expression *plot_data;
  180.   subplot_using *using_clause;
  181.   tree_expression *title_clause;
  182.   subplot_style *style_clause;
  183. };
  184.  
  185. class
  186. subplot_list : public SLList<subplot *>, public tree_print_code
  187. {
  188.  public:
  189.   subplot_list (void) : SLList<subplot *> () { }
  190.  
  191.   subplot_list (subplot *t) : SLList<subplot *> ()
  192.     { append (t); }
  193.  
  194.   ~subplot_list (void)
  195.     {
  196.       while (! empty ())
  197.     {
  198.       subplot *t = remove_front ();
  199.       delete t;
  200.     }
  201.     }
  202.  
  203.   int print (int ndim, ostrstream& plot_buf);
  204.  
  205.   void print_code (ostream& os);
  206. };
  207.  
  208. extern char *save_in_tmp_file (tree_constant& t, int ndim = 2,
  209.                    int parametric = 0);
  210.  
  211. extern void mark_for_deletion (const char *filename);
  212.  
  213. extern void cleanup_tmp_files (void);
  214.  
  215. extern void close_plot_stream (void);
  216.  
  217. #endif
  218.  
  219. /*
  220. ;;; Local Variables: ***
  221. ;;; mode: C++ ***
  222. ;;; page-delimiter: "^/\\*" ***
  223. ;;; End: ***
  224. */
  225.