ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/lsys/interp.h
Revision: 1.1
Committed: Thu Nov 6 14:31:24 2008 UTC (15 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

# Content
1 /*
2 * interpreters interpretating module vectors
3 */
4
5 #ifndef INTERP_H
6 #define INTERP_H
7
8 #include <stack>
9
10 #include "lsys.h"
11 #include "interface.h"
12 #include "util.h"
13 #include "matrix.h"
14
15 #include <iostream> // FIXME only for simple_interpreter
16
17 using namespace std;
18
19 class interpreter {
20 protected:
21 virtual void execute (const module_vec &v, const lsys &l) t_err abstract;
22 virtual bool execute_child (const module &m, const lsys &l) t_err;
23 public:
24 virtual ~interpreter () t_no {};
25 virtual void operator ()(const module_vec &v, const lsys &l) t_err { execute (v, l); };
26 };
27
28 class simple_interpreter : public interpreter {
29 int maxdepth;
30 int depth;
31
32 void execute(const module_vec &v, const lsys &l) t_err;
33 public:
34 simple_interpreter (int depth) t_no : maxdepth (depth) {};
35 void operator ()(const module_vec &v, const lsys &l) t_err;
36 };
37
38 class turtle_interpreter : public interpreter {
39 gfx_int &iface;
40 bool flat;
41
42 double delta, distance;
43 struct state {
44 vec pos;
45 mat dir; /* H L U, up = normal */
46 attribute_set attr;
47 };
48 state cur;
49 stack<state> state_stack;
50
51 points cur_obj;
52 stack<points> obj_stack;
53
54 void rotate_tl (double phi) t_no;
55 void rotate_pd (double phi) t_no;
56 void rotate_rl (double phi) t_no;
57 void forward (double d) t_no;
58
59 void attrs_changed () t_err;
60 protected:
61 void execute (const module_vec &v, const lsys &l) t_err;
62 public:
63 turtle_interpreter (gfx_int &interface, bool flat_world = false) t_no;
64 ~turtle_interpreter () t_no {};
65 void operator ()(const module_vec &v, const lsys &l) t_err;
66 };
67
68 #endif