Orbiter 2022
Combinatorial Objects
orbiter_top_level_session.cpp
Go to the documentation of this file.
1/*
2 * orbiter_top_level_session.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
22orbiter_top_level_session *The_Orbiter_top_level_session; // global top level Orbiter session
23
24
25
27{
28 Orbiter_session = NULL;
29}
30
32{
33 int verbose_level = 1;
34 int f_v = (verbose_level >= 1);
35
36 if (f_v) {
37 cout << "orbiter_top_level_session::~orbiter_top_level_session" << endl;
38 }
39 if (Orbiter_session) {
40 if (f_v) {
41 cout << "orbiter_top_level_session::~orbiter_top_level_session before delete Orbiter_session" << endl;
42 }
43 delete Orbiter_session;
44 if (f_v) {
45 cout << "orbiter_top_level_session::~orbiter_top_level_session after delete Orbiter_session" << endl;
46 }
47 }
48 if (f_v) {
49 cout << "orbiter_top_level_session::~orbiter_top_level_session done" << endl;
50 }
51}
52
54 std::string *argv, int i0)
55{
56 int i;
57
58 cout << "orbiter_top_level_session::startup_and_read_arguments before new orbiter_session" << endl;
59
61
62 cout << "orbiter_top_level_session::startup_and_read_arguments after new orbiter_session" << endl;
63 cout << "orbiter_top_level_session::startup_and_read_arguments before Orbiter_session->read_arguments" << endl;
64
65 i = Orbiter_session->read_arguments(argc, argv, i0);
66
67
68
69 cout << "orbiter_top_level_session::startup_and_read_arguments done" << endl;
70 return i;
71}
72
73void orbiter_top_level_session::handle_everything(int argc, std::string *Argv, int i, int verbose_level)
74{
75 int f_v = (verbose_level >= 1);
76
77 if (FALSE) {
78 cout << "orbiter_top_level_session::handle_everything" << endl;
79 }
81 int j;
82
83 cout << "argument list:" << endl;
84 for (j = 0; j < argc; j++) {
85 cout << j << " : " << Argv[j] << endl;
86 }
87#if 0
88 string cmd;
89
90 cmd.assign(Session.orbiter_path);
91 cmd.append("orbiter.out");
92 for (j = 1; j < argc; j++) {
93 cmd.append(" \"");
94 cmd.append(argv[j]);
95 cmd.append("\" ");
96 }
97 cout << "system: " << cmd << endl;
98 system(cmd.c_str());
99 exit(1);
100#endif
101 }
102
103
104 if (Orbiter_session->f_fork) {
105 if (f_v) {
106 cout << "before Top_level_session.Orbiter_session->fork" << endl;
107 }
108 Orbiter_session->fork(argc, Argv, verbose_level);
109 if (f_v) {
110 cout << "after Session.fork" << endl;
111 }
112 }
113 else {
114 if (Orbiter_session->f_seed) {
116
117 if (f_v) {
118 cout << "seeding random number generator with " << Orbiter_session->the_seed << endl;
119 }
121 Os.random_integer(1000);
122 }
125 }
126
127 // main dispatch:
128
129 parse_and_execute(argc, Argv, i, verbose_level);
130
131
132 // finish:
133
135 if (f_v) {
136 cout << "orbiter_top_level_session::handle_everything memory_debug "
137 "before global_mem_object_registry.dump" << endl;
138 }
142 if (f_v) {
143 cout << "orbiter_top_level_session::handle_everything memory_debug "
144 "after global_mem_object_registry.dump" << endl;
145 }
146 }
147 }
148 if (f_v) {
149 cout << "orbiter_top_level_session::handle_everything done" << endl;
150 }
151
152}
153
154void orbiter_top_level_session::parse_and_execute(int argc, std::string *Argv, int i, int verbose_level)
155{
156 //verbose_level = 1;
157 int f_v = (verbose_level >= 1);
158 int f_vv = FALSE;
159
160 if (FALSE) {
161 cout << "orbiter_top_level_session::parse_and_execute, "
162 "parsing the orbiter dash code" << endl;
163 }
164
165
166 vector<void *> program;
167
168 if (f_vv) {
169 cout << "orbiter_top_level_session::parse_and_execute before parse" << endl;
170 }
171 parse(argc, Argv, i, program, verbose_level);
172 if (f_vv) {
173 cout << "orbiter_top_level_session::parse_and_execute after parse" << endl;
174 }
175
176 if (f_v) {
177 cout << "orbiter_top_level_session::parse_and_execute, "
178 "we have parsed the following orbiter dash code program:" << endl;
179 }
180 for (i = 0; i < program.size(); i++) {
181
182 orbiter_command *OC;
183
184 OC = (orbiter_command *) program[i];
185
186 cout << "Command " << i << ":" << endl;
187 OC->print();
188 }
189
190 if (f_v) {
191 cout << "################################################################################################" << endl;
192 }
193 if (f_v) {
194 cout << "Executing commands:" << endl;
195 }
196
197 for (i = 0; i < program.size(); i++) {
198
199 orbiter_command *OC;
200
201 OC = (orbiter_command *) program[i];
202
203 if (f_v) {
204 cout << "################################################################################################" << endl;
205 cout << "Executing command " << i << ":" << endl;
206 OC->print();
207 cout << "################################################################################################" << endl;
208 }
209
210 OC->execute(verbose_level);
211
212 }
213
214
215 if (f_v) {
216 cout << "Executing commands done" << endl;
217 }
218
219 if (f_v) {
220 cout << "orbiter_top_level_session::parse_and_execute done" << endl;
221 }
222}
223
224void orbiter_top_level_session::parse(int argc, std::string *Argv,
225 int &i, std::vector<void *> &program, int verbose_level)
226{
227 int cnt = 0;
228 int f_v = (verbose_level >= 1);
229 int f_vv = FALSE;
230 int i_prev = -1;
231
232 if (f_v) {
233 cout << "orbiter_top_level_session::parse, parsing the orbiter dash code" << endl;
234 }
235
236 while (i < argc) {
237 if (f_vv) {
238 cout << "orbiter_top_level_session::parse "
239 "cnt = " << cnt << ", i = " << i << endl;
240 if (i < argc) {
241 if (f_vv) {
242 cout << "orbiter_top_level_session::parse i=" << i
243 << ", next argument is " << Argv[i] << endl;
244 }
245 }
246 }
247 if (i_prev == i) {
248 cout << "orbiter_top_level_session::parse we seem to be stuck in a look" << endl;
249 exit(1);
250 }
251 i_prev = i;
252 if (f_v) {
253 cout << "orbiter_top_level_session::parse before Interface_symbol_table, i = " << i << endl;
254 }
255
256 orbiter_command *OC;
257
259 if (f_vv) {
260 cout << "orbiter_top_level_session::parse before OC->parse" << endl;
261 }
262 OC->parse(this, argc, Argv, i, verbose_level);
263 if (f_vv) {
264 cout << "orbiter_top_level_session::parse after OC->parse" << endl;
265 }
266
267 program.push_back(OC);
268
269#if 0
270 if (f_v) {
271 cout << "orbiter_top_level_session::parse before OC->execute" << endl;
272 }
273 OC->execute(verbose_level);
274 if (f_v) {
275 cout << "orbiter_top_level_session::parse after OC->execute" << endl;
276 }
277#endif
278
279
280
281
282 //cout << "Command is unrecognized " << Argv[i] << endl;
283 //exit(1);
284 cnt++;
285 }
286
287 if (f_v) {
288 cout << "orbiter_top_level_session::parse, parsing the orbiter dash code done" << endl;
289 }
290}
291
293{
294 return Orbiter_session->get_object(idx);
295}
296
298{
299 return Orbiter_session->get_object_type(idx);
300}
301
303{
304 return Orbiter_session->find_symbol(label);
305}
306
307void orbiter_top_level_session::find_symbols(std::vector<std::string> &Labels, int *&Idx)
308{
309
310 Orbiter_session->find_symbols(Labels, Idx);
311}
312
314{
316}
317
320{
321 Orbiter_session->add_symbol_table_entry(label, Symb, verbose_level);
322}
323
325{
326 int idx;
327
328 idx = Orbiter_session->find_symbol(label);
329 if (idx == -1) {
330 cout << "orbiter_top_level_session::get_object_of_type_any_group cannot find symbol " << label << endl;
331 exit(1);
332 }
333 if (get_object_type(idx) != t_any_group) {
334 cout << "orbiter_top_level_session::get_object_of_type_any_group object type != t_any_group" << endl;
335 exit(1);
336 }
337 return (apps_algebra::any_group *) get_object(idx);
338}
339
341{
342 int idx;
343
344 idx = Orbiter_session->find_symbol(label);
345 if (idx == -1) {
346 cout << "orbiter_top_level_session::get_object_of_type_projective_space cannot find symbol " << label << endl;
347 exit(1);
348 }
350 cout << "orbiter_top_level_session::get_object_of_type_projective_space object type != t_projective_space" << endl;
351 exit(1);
352 }
354}
355
356
357
358}}}
359
360
The orbiter session is responsible for the command line interface and the program execution.
void fork(int argc, std::string *argv, int verbose_level)
void find_symbols(std::vector< std::string > &Labels, int *&Idx)
void add_symbol_table_entry(std::string &label, orbiter_symbol_table_entry *Symb, int verbose_level)
orbiter_kernel_system::mem_object_registry * global_mem_object_registry
symbol table to store data entries for the orbiter run-time system
a wrapper for linear_group and permutation_group_create
projective space PG(n,q) with automorphism group PGGL(n+1,q)
a single command in the Orbiter dash code language
Definition: interfaces.h:764
void parse(orbiter_top_level_session *Orbiter_top_level_session, 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
projective_geometry::projective_space_with_action * get_object_of_type_projective_space(std::string &label)
void add_symbol_table_entry(std::string &label, orbiter_kernel_system::orbiter_symbol_table_entry *Symb, int verbose_level)
void handle_everything(int argc, std::string *Argv, int i, int verbose_level)
void parse(int argc, std::string *Argv, int &i, std::vector< void * > &program, int verbose_level)
void parse_and_execute(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
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
user_interface::orbiter_top_level_session * The_Orbiter_top_level_session
the orbiter library for the classification of combinatorial objects