-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenvironment.cpp
115 lines (73 loc) · 2.52 KB
/
environment.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// File: environment.cpp
// Author: Samuel McFalls
#include "environment.hpp"
Environment::Environment() {
env[std::string("pi")] = EnvEntry(atan2(0, -1));
EnvEntry::fptrBool notFptr = notProc;
env[std::string("not")] = EnvEntry(notFptr);
EnvEntry::fptrBool andFptr = andProc;
env[std::string("and")] = EnvEntry(andFptr);
EnvEntry::fptrBool orFptr = orProc;
env[std::string("or")] = EnvEntry(orFptr);
EnvEntry::fptrBool ltFptr = ltProc;
env[std::string("<")] = EnvEntry(ltFptr);
EnvEntry::fptrBool lteFptr = lteProc;
env[std::string("<=")] = EnvEntry(lteFptr);
EnvEntry::fptrBool gtFptr = gtProc;
env[std::string(">")] = EnvEntry(gtFptr);
EnvEntry::fptrBool gteFptr = gteProc;
env[std::string(">=")] = EnvEntry(gteFptr);
EnvEntry::fptrBool equalFptr = equalProc;
env[std::string("=")] = EnvEntry(equalFptr);
EnvEntry::fptrNumber sumFptr = sumProc;
env[std::string("+")] = EnvEntry(sumFptr);
EnvEntry::fptrNumber subFptr = subProc;
env[std::string("-")] = EnvEntry(subFptr);
EnvEntry::fptrNumber multFptr = multProc;
env[std::string("*")] = EnvEntry(multFptr);
EnvEntry::fptrNumber divFptr = divProc;
env[std::string("/")] = EnvEntry(divFptr);
EnvEntry::fptrNumber sinFptr = sinProc;
env[std::string("sin")] = EnvEntry(sinFptr);
EnvEntry::fptrNumber cosFptr = cosProc;
env[std::string("cos")] = EnvEntry(cosFptr);
EnvEntry::fptrNumber arctanFptr = arctanProc;
env[std::string("arctan")] = EnvEntry(arctanFptr);
EnvEntry::fptrPoint pointFptr = pointProc;
env[std::string("point")] = EnvEntry(pointFptr);
EnvEntry::fptrLine lineFptr = lineProc;
env[std::string("line")] = EnvEntry(lineFptr);
EnvEntry::fptrArc arcFptr = arcProc;
env[std::string("arc")] = EnvEntry(arcFptr);
}
void Environment::define(std::string symbol, EnvEntry entry) {
if (env.find(symbol) == env.end()) {
env[symbol] = entry;
}
else {
throw InterpreterSemanticError("Attempt to redefine symbol");
}
}
EnvEntry Environment::fetch(std::string symbol) {
if (env.find(symbol) == env.end()) {
throw InterpreterSemanticError("Unknown symbol");
}
return env[symbol];
}
bool Environment::exists(std::string symbol) {
return env.find(symbol) != env.end();
}
void Environment::clearToDraw() {
toDraw.clear();
}
void Environment::addDraw(Atom item) {
if (item.getType() != Atom::Type::POINT &&
item.getType() != Atom::Type::LINE &&
item.getType() != Atom::Type::ARC) {
throw std::logic_error("Item is not of graphical type");
}
toDraw.push_back(item);
}
std::vector<Atom> Environment::toBeDrawn() {
return toDraw;
}