996
|
1 // Closure.h
|
|
2
|
|
3 #ifndef CLOSURE_H_RAIL_1
|
|
4 #define CLOSURE_H_RAIL_1
|
|
5
|
|
6 #include "Binding.h"
|
|
7 #include "Vec.h"
|
|
8 #include "Dir.h"
|
|
9 #include "Var.h"
|
|
10 #include "Board.h"
|
|
11
|
|
12 class Closure : public Var
|
|
13 {
|
|
14 public:
|
|
15 Closure(std::map<std::string, Binding> const & newEnv,
|
|
16 Board const & newFunc,
|
|
17 Vec newPos,
|
|
18 Dir::t newDir)
|
|
19 : environment(newEnv)
|
|
20 , function(newFunc)
|
|
21 , position(newPos)
|
|
22 , direction(newDir) {}
|
|
23 virtual ~Closure() {}
|
|
24
|
|
25 virtual StringVar * getString(void)
|
|
26 {
|
|
27 return NULL;
|
|
28 }
|
|
29
|
|
30 virtual ListVar * getList(void)
|
|
31 {
|
|
32 return NULL;
|
|
33 }
|
|
34
|
|
35 virtual NilVar * getNil(void)
|
|
36 {
|
|
37 return NULL;
|
|
38 }
|
|
39
|
|
40 virtual Closure * getClosure(void)
|
|
41 {
|
|
42 return this;
|
|
43 }
|
|
44
|
|
45 virtual std::string toString(void) const
|
|
46 {
|
|
47 return "(closure '" + function.getName() + "')";
|
|
48 }
|
|
49
|
|
50 std::map<std::string, Binding> const & getEnvironment(void) const
|
|
51 {
|
|
52 return environment;
|
|
53 }
|
|
54
|
|
55 Board const & getFunction(void) const
|
|
56 {
|
|
57 return function;
|
|
58 }
|
|
59
|
|
60 Vec getPosition(void) const
|
|
61 {
|
|
62 return position;
|
|
63 }
|
|
64
|
|
65 Dir::t getDirection(void) const
|
|
66 {
|
|
67 return direction;
|
|
68 }
|
|
69 private:
|
|
70 Closure();
|
|
71 Closure(Closure const &);
|
|
72 Closure & operator=(Closure const &) { return *this; }
|
|
73 private:
|
|
74 std::map<std::string, Binding> environment;
|
|
75 Board const & function;
|
|
76 Vec position;
|
|
77 Dir::t direction;
|
|
78 };
|
|
79
|
|
80 #endif
|