Orbiter 2022
Combinatorial Objects
interface_symbol_table.cpp
Go to the documentation of this file.
1/*
2 * interface_symbol_table.cpp
3 *
4 * Created on: Dec 2, 2020
5 * Author: betten
6 */
7
8
9
10
11
12
13#include "orbiter.h"
14
15using namespace std;
16
17namespace orbiter {
18namespace layer5_applications {
19namespace user_interface {
20
21
22
23
25{
26
28
30 Symbol_definition = NULL;
31
33
34 f_with = FALSE;
35 //std::vector<std::string> with_labels;
36
39
40}
41
43 int verbose_level)
44{
45 int f_v = (verbose_level >= 1);
46
47 if (f_v) {
48 cout << "interface_symbol_table::init" << endl;
49 }
51 if (f_v) {
52 cout << "interface_symbol_table::done" << endl;
53 }
54}
55
57 std::string *argv, int i, int verbose_level)
58{
60
61 if (ST.stringcmp(argv[i], "-define") == 0) {
62 cout << "-define <string : label> description -end" << endl;
63 }
64 else if (ST.stringcmp(argv[i], "-print_symbols") == 0) {
65 cout << "-print_symbols" << endl;
66 }
67 else if (ST.stringcmp(argv[i], "-with") == 0) {
68 cout << "-with <string : label> *[ -and <string : label> ] -do ... -end" << endl;
69 }
70}
71
73 std::string *argv, int i, int verbose_level)
74{
76
77 if (i >= argc) {
78 return false;
79 }
80 if (ST.stringcmp(argv[i], "-define") == 0) {
81 return true;
82 }
83 else if (ST.stringcmp(argv[i], "-print_symbols") == 0) {
84 return true;
85 }
86 else if (ST.stringcmp(argv[i], "-with") == 0) {
87 return true;
88 }
89 return false;
90}
91
93 int argc, std::string *argv, int &i, int verbose_level)
94{
95 int f_v = (verbose_level >= 1);
96
98
99 if (f_v) {
100 cout << "interface_symbol_table::read_arguments" << endl;
101 }
102
103
104 if (f_v) {
105 cout << "interface_symbol_table::read_arguments the next argument is " << argv[i] << endl;
106 }
107
108 if (ST.stringcmp(argv[i], "-define") == 0) {
109
110 f_define = TRUE;
112
113
114 if (f_v) {
115 cout << "interface_symbol_table::read_arguments "
116 "before Symbol_definition->read_definition" << endl;
117 }
118 Symbol_definition->read_definition(this, argc, argv, i, verbose_level);
119 if (f_v) {
120 cout << "interface_symbol_table::read_arguments "
121 "after Symbol_definition->read_definition" << endl;
122 }
123
124#if 0
125 if (f_v) {
126 cout << "interface_symbol_table::read_arguments "
127 "before Symbol_definition->perform_definition" << endl;
128 }
130 if (f_v) {
131 cout << "interface_symbol_table::read_arguments "
132 "after Symbol_definition->perform_definition" << endl;
133 }
134#endif
135 }
136
137 else if (ST.stringcmp(argv[i], "-print_symbols") == 0) {
139 if (f_v) {
140 cout << "-print_symbols" << endl;
141 }
142 i++;
143 }
144
145 else if (ST.stringcmp(argv[i], "-with") == 0) {
146 read_with(argc, argv, i, verbose_level);
147 }
148
149 if (f_v) {
150 cout << "interface_symbol_table::read_arguments done" << endl;
151 }
152 //return i;
153}
154
155
156
157
158
159
161 int argc, std::string *argv, int &i, int verbose_level)
162{
163 int f_v = (verbose_level >= 1);
164
165 if (f_v) {
166 cout << "interface_symbol_table::read_with" << endl;
167 }
168
169 f_with = TRUE;
170 string s;
172
173 s.assign(argv[++i]);
174 with_labels.push_back(s);
175
176 while (TRUE) {
177 i++;
178 if (ST.stringcmp(argv[i], "-and") == 0) {
179 string s;
180
181 s.assign(argv[++i]);
182 with_labels.push_back(s);
183 }
184 else if (ST.stringcmp(argv[i], "-do") == 0) {
185 i++;
186
189
190 Activity_description->read_arguments(this, argc, argv, i, verbose_level);
191 break;
192 }
193 else {
194 cout << "syntax error after -with, seeing " << argv[i] << endl;
195 exit(1);
196 }
197 }
198 if (f_v) {
199 cout << "interface_symbol_table::read_with done" << endl;
200 }
201
202}
203
204
205void interface_symbol_table::worker(int verbose_level)
206{
207 int f_v = (verbose_level >= 1);
208
209 if (f_v) {
210 cout << "interface_symbol_table::worker" << endl;
211 }
212 if (f_define) {
214 }
215 else if (f_print_symbols) {
217 }
218 else if (f_activity) {
219 Activity_description->worker(verbose_level);
220 }
221 if (f_v) {
222 cout << "interface_symbol_table::worker done" << endl;
223 }
224}
225
227{
228 if (f_define) {
230 }
231 if (f_print_symbols) {
232 cout << "print_symbol_table" << endl;
233 }
234 if (f_activity) {
236 }
237}
238
240{
241 int i;
242
243 for (i = 0; i < with_labels.size(); i++) {
244 cout << with_labels[i];
245 if (i < with_labels.size() - 1) {
246 cout << ", ";
247 }
248 }
249 cout << endl;
250
251}
252
253}}}
254
functions related to strings and character arrays
description of an activity for an orbiter symbol
Definition: interfaces.h:26
void read_arguments(interface_symbol_table *Sym, int argc, std::string *argv, int &i, int verbose_level)
void print_help(int argc, std::string *argv, int i, int verbose_level)
void init(orbiter_top_level_session *Orbiter_top_level_session, int verbose_level)
void read_with(int argc, std::string *argv, int &i, int verbose_level)
void read_arguments(int argc, std::string *argv, int &i, int verbose_level)
int recognize_keyword(int argc, std::string *argv, int i, int verbose_level)
The top level orbiter session is responsible for the command line interface and the program execution...
Definition: interfaces.h:814
void read_definition(interface_symbol_table *Sym, int argc, std::string *argv, int &i, int verbose_level)
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
the orbiter library for the classification of combinatorial objects