mCRL2
Loading...
Searching...
No Matches
builder.h
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
11
12#ifndef MCRL2_PROCESS_BUILDER_H
13#define MCRL2_PROCESS_BUILDER_H
14
15#include "mcrl2/data/builder.h"
18// #include "mcrl2/lps/multi_action.h"
19
20namespace mcrl2
21{
22
23namespace process
24{
25
26// Adds sort expression traversal to a builder
27//--- start generated add_sort_expressions code ---//
28template <template <class> class Builder, class Derived>
29struct add_sort_expressions: public Builder<Derived>
30{
31 typedef Builder<Derived> super;
32 using super::enter;
33 using super::leave;
34 using super::update;
35 using super::apply;
36
37 template <class T>
38 void apply(T& result, const process::action_label& x)
39 {
40
41 static_cast<Derived&>(*this).enter(x);
42 process::make_action_label(result, x.name(), [&](data::sort_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.sorts()); });
43 static_cast<Derived&>(*this).leave(x);
44 }
45
47 {
48 static_cast<Derived&>(*this).enter(x);
49 process::action_label_list result_action_labels;
50 static_cast<Derived&>(*this).apply(result_action_labels, x.action_labels());
51 x.action_labels() = result_action_labels;
52 static_cast<Derived&>(*this).update(x.global_variables());
53 static_cast<Derived&>(*this).update(x.equations());
54 process_expression result_init;
55 static_cast<Derived&>(*this).apply(result_init, x.init());
56 x.init() = result_init;
57 static_cast<Derived&>(*this).leave(x);
58 }
59
60 template <class T>
61 void apply(T& result, const process::process_identifier& x)
62 {
63
64 static_cast<Derived&>(*this).enter(x);
65 process::make_process_identifier(result, x.name(), [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); });
66 static_cast<Derived&>(*this).leave(x);
67 }
68
69 template <class T>
70 void apply(T& result, const process::process_equation& x)
71 {
72
73 static_cast<Derived&>(*this).enter(x);
74 process::make_process_equation(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.formal_parameters()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.expression()); });
75 static_cast<Derived&>(*this).leave(x);
76 }
77
78 template <class T>
79 void apply(T& result, const process::untyped_multi_action& x)
80 {
81
82 static_cast<Derived&>(*this).enter(x);
83 process::make_untyped_multi_action(result, [&](data::untyped_data_parameter_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
84 static_cast<Derived&>(*this).leave(x);
85 }
86
87 template <class T>
88 void apply(T& result, const process::action& x)
89 {
90
91 static_cast<Derived&>(*this).enter(x);
92 process::make_action(result, [&](action_label& result){ static_cast<Derived&>(*this).apply(result, x.label()); }, [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
93 static_cast<Derived&>(*this).leave(x);
94 }
95
96 template <class T>
97 void apply(T& result, const process::process_instance& x)
98 {
99
100 static_cast<Derived&>(*this).enter(x);
101 process::make_process_instance(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.actual_parameters()); });
102 static_cast<Derived&>(*this).leave(x);
103 }
104
105 template <class T>
107 {
108
109 static_cast<Derived&>(*this).enter(x);
110 process::make_process_instance_assignment(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
111 static_cast<Derived&>(*this).leave(x);
112 }
113
114 template <class T>
115 void apply(T& result, const process::delta& x)
116 {
117
118 result = x;
119 static_cast<Derived&>(*this).enter(x);
120 // skip
121 static_cast<Derived&>(*this).leave(x);
122 result = x;
123 }
124
125 template <class T>
126 void apply(T& result, const process::tau& x)
127 {
128
129 result = x;
130 static_cast<Derived&>(*this).enter(x);
131 // skip
132 static_cast<Derived&>(*this).leave(x);
133 result = x;
134 }
135
136 template <class T>
137 void apply(T& result, const process::sum& x)
138 {
139
140 static_cast<Derived&>(*this).enter(x);
141 process::make_sum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
142 static_cast<Derived&>(*this).leave(x);
143 }
144
145 template <class T>
146 void apply(T& result, const process::block& x)
147 {
148
149 static_cast<Derived&>(*this).enter(x);
150 process::make_block(result, x.block_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
151 static_cast<Derived&>(*this).leave(x);
152 }
153
154 template <class T>
155 void apply(T& result, const process::hide& x)
156 {
157
158 static_cast<Derived&>(*this).enter(x);
159 process::make_hide(result, x.hide_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
160 static_cast<Derived&>(*this).leave(x);
161 }
162
163 template <class T>
164 void apply(T& result, const process::rename& x)
165 {
166
167 static_cast<Derived&>(*this).enter(x);
168 process::make_rename(result, x.rename_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
169 static_cast<Derived&>(*this).leave(x);
170 }
171
172 template <class T>
173 void apply(T& result, const process::comm& x)
174 {
175
176 static_cast<Derived&>(*this).enter(x);
177 process::make_comm(result, x.comm_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
178 static_cast<Derived&>(*this).leave(x);
179 }
180
181 template <class T>
182 void apply(T& result, const process::allow& x)
183 {
184
185 static_cast<Derived&>(*this).enter(x);
186 process::make_allow(result, x.allow_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
187 static_cast<Derived&>(*this).leave(x);
188 }
189
190 template <class T>
191 void apply(T& result, const process::sync& x)
192 {
193
194 static_cast<Derived&>(*this).enter(x);
195 process::make_sync(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
196 static_cast<Derived&>(*this).leave(x);
197 }
198
199 template <class T>
200 void apply(T& result, const process::at& x)
201 {
202
203 static_cast<Derived&>(*this).enter(x);
204 process::make_at(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
205 static_cast<Derived&>(*this).leave(x);
206 }
207
208 template <class T>
209 void apply(T& result, const process::seq& x)
210 {
211
212 static_cast<Derived&>(*this).enter(x);
213 process::make_seq(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
214 static_cast<Derived&>(*this).leave(x);
215 }
216
217 template <class T>
218 void apply(T& result, const process::if_then& x)
219 {
220
221 static_cast<Derived&>(*this).enter(x);
222 process::make_if_then(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); });
223 static_cast<Derived&>(*this).leave(x);
224 }
225
226 template <class T>
227 void apply(T& result, const process::if_then_else& x)
228 {
229
230 static_cast<Derived&>(*this).enter(x);
231 process::make_if_then_else(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.else_case()); });
232 static_cast<Derived&>(*this).leave(x);
233 }
234
235 template <class T>
236 void apply(T& result, const process::bounded_init& x)
237 {
238
239 static_cast<Derived&>(*this).enter(x);
240 process::make_bounded_init(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
241 static_cast<Derived&>(*this).leave(x);
242 }
243
244 template <class T>
245 void apply(T& result, const process::merge& x)
246 {
247
248 static_cast<Derived&>(*this).enter(x);
249 process::make_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
250 static_cast<Derived&>(*this).leave(x);
251 }
252
253 template <class T>
254 void apply(T& result, const process::left_merge& x)
255 {
256
257 static_cast<Derived&>(*this).enter(x);
258 process::make_left_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
259 static_cast<Derived&>(*this).leave(x);
260 }
261
262 template <class T>
263 void apply(T& result, const process::choice& x)
264 {
265
266 static_cast<Derived&>(*this).enter(x);
267 process::make_choice(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
268 static_cast<Derived&>(*this).leave(x);
269 }
270
271 template <class T>
272 void apply(T& result, const process::stochastic_operator& x)
273 {
274
275 static_cast<Derived&>(*this).enter(x);
276 process::make_stochastic_operator(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.distribution()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
277 static_cast<Derived&>(*this).leave(x);
278 }
279
280 template <class T>
282 {
283
284 static_cast<Derived&>(*this).enter(x);
285 process::make_untyped_process_assignment(result, x.name(), [&](data::untyped_identifier_assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
286 static_cast<Derived&>(*this).leave(x);
287 }
288
289 template <class T>
290 void apply(T& result, const process::process_expression& x)
291 {
292
293 static_cast<Derived&>(*this).enter(x);
295 {
296 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
297 }
298 else if (process::is_action(x))
299 {
300 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::action>(x));
301 }
303 {
304 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
305 }
307 {
308 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
309 }
310 else if (process::is_delta(x))
311 {
312 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::delta>(x));
313 }
314 else if (process::is_tau(x))
315 {
316 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::tau>(x));
317 }
318 else if (process::is_sum(x))
319 {
320 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sum>(x));
321 }
322 else if (process::is_block(x))
323 {
324 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::block>(x));
325 }
326 else if (process::is_hide(x))
327 {
328 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::hide>(x));
329 }
330 else if (process::is_rename(x))
331 {
332 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::rename>(x));
333 }
334 else if (process::is_comm(x))
335 {
336 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::comm>(x));
337 }
338 else if (process::is_allow(x))
339 {
340 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::allow>(x));
341 }
342 else if (process::is_sync(x))
343 {
344 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sync>(x));
345 }
346 else if (process::is_at(x))
347 {
348 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::at>(x));
349 }
350 else if (process::is_seq(x))
351 {
352 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::seq>(x));
353 }
354 else if (process::is_if_then(x))
355 {
356 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
357 }
358 else if (process::is_if_then_else(x))
359 {
360 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
361 }
362 else if (process::is_bounded_init(x))
363 {
364 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
365 }
366 else if (process::is_merge(x))
367 {
368 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::merge>(x));
369 }
370 else if (process::is_left_merge(x))
371 {
372 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
373 }
374 else if (process::is_choice(x))
375 {
376 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::choice>(x));
377 }
379 {
380 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
381 }
383 {
384 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
385 }
386 static_cast<Derived&>(*this).leave(x);
387 }
388
389};
390
392template <typename Derived>
393struct sort_expression_builder: public add_sort_expressions<data::sort_expression_builder, Derived>
394{
395};
396//--- end generated add_sort_expressions code ---//
397
398// Adds data expression traversal to a builder
399//--- start generated add_data_expressions code ---//
400template <template <class> class Builder, class Derived>
401struct add_data_expressions: public Builder<Derived>
402{
403 typedef Builder<Derived> super;
404 using super::enter;
405 using super::leave;
406 using super::update;
407 using super::apply;
408
410 {
411 static_cast<Derived&>(*this).enter(x);
412 static_cast<Derived&>(*this).update(x.equations());
413 process_expression result_init;
414 static_cast<Derived&>(*this).apply(result_init, x.init());
415 x.init() = result_init;
416 static_cast<Derived&>(*this).leave(x);
417 }
418
419 template <class T>
420 void apply(T& result, const process::process_equation& x)
421 {
422
423 static_cast<Derived&>(*this).enter(x);
424 process::make_process_equation(result, x.identifier(), x.formal_parameters(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.expression()); });
425 static_cast<Derived&>(*this).leave(x);
426 }
427
428 template <class T>
429 void apply(T& result, const process::untyped_multi_action& x)
430 {
431
432 static_cast<Derived&>(*this).enter(x);
433 process::make_untyped_multi_action(result, [&](data::untyped_data_parameter_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
434 static_cast<Derived&>(*this).leave(x);
435 }
436
437 template <class T>
438 void apply(T& result, const process::action& x)
439 {
440
441 static_cast<Derived&>(*this).enter(x);
442 process::make_action(result, x.label(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
443 static_cast<Derived&>(*this).leave(x);
444 }
445
446 template <class T>
447 void apply(T& result, const process::process_instance& x)
448 {
449
450 static_cast<Derived&>(*this).enter(x);
451 process::make_process_instance(result, x.identifier(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.actual_parameters()); });
452 static_cast<Derived&>(*this).leave(x);
453 }
454
455 template <class T>
457 {
458
459 static_cast<Derived&>(*this).enter(x);
460 process::make_process_instance_assignment(result, x.identifier(), [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
461 static_cast<Derived&>(*this).leave(x);
462 }
463
464 template <class T>
465 void apply(T& result, const process::delta& x)
466 {
467
468 result = x;
469 static_cast<Derived&>(*this).enter(x);
470 // skip
471 static_cast<Derived&>(*this).leave(x);
472 result = x;
473 }
474
475 template <class T>
476 void apply(T& result, const process::tau& x)
477 {
478
479 result = x;
480 static_cast<Derived&>(*this).enter(x);
481 // skip
482 static_cast<Derived&>(*this).leave(x);
483 result = x;
484 }
485
486 template <class T>
487 void apply(T& result, const process::sum& x)
488 {
489
490 static_cast<Derived&>(*this).enter(x);
491 process::make_sum(result, x.variables(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
492 static_cast<Derived&>(*this).leave(x);
493 }
494
495 template <class T>
496 void apply(T& result, const process::block& x)
497 {
498
499 static_cast<Derived&>(*this).enter(x);
500 process::make_block(result, x.block_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
501 static_cast<Derived&>(*this).leave(x);
502 }
503
504 template <class T>
505 void apply(T& result, const process::hide& x)
506 {
507
508 static_cast<Derived&>(*this).enter(x);
509 process::make_hide(result, x.hide_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
510 static_cast<Derived&>(*this).leave(x);
511 }
512
513 template <class T>
514 void apply(T& result, const process::rename& x)
515 {
516
517 static_cast<Derived&>(*this).enter(x);
518 process::make_rename(result, x.rename_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
519 static_cast<Derived&>(*this).leave(x);
520 }
521
522 template <class T>
523 void apply(T& result, const process::comm& x)
524 {
525
526 static_cast<Derived&>(*this).enter(x);
527 process::make_comm(result, x.comm_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
528 static_cast<Derived&>(*this).leave(x);
529 }
530
531 template <class T>
532 void apply(T& result, const process::allow& x)
533 {
534
535 static_cast<Derived&>(*this).enter(x);
536 process::make_allow(result, x.allow_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
537 static_cast<Derived&>(*this).leave(x);
538 }
539
540 template <class T>
541 void apply(T& result, const process::sync& x)
542 {
543
544 static_cast<Derived&>(*this).enter(x);
545 process::make_sync(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
546 static_cast<Derived&>(*this).leave(x);
547 }
548
549 template <class T>
550 void apply(T& result, const process::at& x)
551 {
552
553 static_cast<Derived&>(*this).enter(x);
554 process::make_at(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
555 static_cast<Derived&>(*this).leave(x);
556 }
557
558 template <class T>
559 void apply(T& result, const process::seq& x)
560 {
561
562 static_cast<Derived&>(*this).enter(x);
563 process::make_seq(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
564 static_cast<Derived&>(*this).leave(x);
565 }
566
567 template <class T>
568 void apply(T& result, const process::if_then& x)
569 {
570
571 static_cast<Derived&>(*this).enter(x);
572 process::make_if_then(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); });
573 static_cast<Derived&>(*this).leave(x);
574 }
575
576 template <class T>
577 void apply(T& result, const process::if_then_else& x)
578 {
579
580 static_cast<Derived&>(*this).enter(x);
581 process::make_if_then_else(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.else_case()); });
582 static_cast<Derived&>(*this).leave(x);
583 }
584
585 template <class T>
586 void apply(T& result, const process::bounded_init& x)
587 {
588
589 static_cast<Derived&>(*this).enter(x);
590 process::make_bounded_init(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
591 static_cast<Derived&>(*this).leave(x);
592 }
593
594 template <class T>
595 void apply(T& result, const process::merge& x)
596 {
597
598 static_cast<Derived&>(*this).enter(x);
599 process::make_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
600 static_cast<Derived&>(*this).leave(x);
601 }
602
603 template <class T>
604 void apply(T& result, const process::left_merge& x)
605 {
606
607 static_cast<Derived&>(*this).enter(x);
608 process::make_left_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
609 static_cast<Derived&>(*this).leave(x);
610 }
611
612 template <class T>
613 void apply(T& result, const process::choice& x)
614 {
615
616 static_cast<Derived&>(*this).enter(x);
617 process::make_choice(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
618 static_cast<Derived&>(*this).leave(x);
619 }
620
621 template <class T>
622 void apply(T& result, const process::stochastic_operator& x)
623 {
624
625 static_cast<Derived&>(*this).enter(x);
626 process::make_stochastic_operator(result, x.variables(), [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.distribution()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
627 static_cast<Derived&>(*this).leave(x);
628 }
629
630 template <class T>
632 {
633
634 static_cast<Derived&>(*this).enter(x);
635 process::make_untyped_process_assignment(result, x.name(), [&](data::untyped_identifier_assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
636 static_cast<Derived&>(*this).leave(x);
637 }
638
639 template <class T>
640 void apply(T& result, const process::process_expression& x)
641 {
642
643 static_cast<Derived&>(*this).enter(x);
645 {
646 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
647 }
648 else if (process::is_action(x))
649 {
650 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::action>(x));
651 }
653 {
654 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
655 }
657 {
658 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
659 }
660 else if (process::is_delta(x))
661 {
662 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::delta>(x));
663 }
664 else if (process::is_tau(x))
665 {
666 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::tau>(x));
667 }
668 else if (process::is_sum(x))
669 {
670 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sum>(x));
671 }
672 else if (process::is_block(x))
673 {
674 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::block>(x));
675 }
676 else if (process::is_hide(x))
677 {
678 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::hide>(x));
679 }
680 else if (process::is_rename(x))
681 {
682 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::rename>(x));
683 }
684 else if (process::is_comm(x))
685 {
686 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::comm>(x));
687 }
688 else if (process::is_allow(x))
689 {
690 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::allow>(x));
691 }
692 else if (process::is_sync(x))
693 {
694 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sync>(x));
695 }
696 else if (process::is_at(x))
697 {
698 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::at>(x));
699 }
700 else if (process::is_seq(x))
701 {
702 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::seq>(x));
703 }
704 else if (process::is_if_then(x))
705 {
706 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
707 }
708 else if (process::is_if_then_else(x))
709 {
710 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
711 }
712 else if (process::is_bounded_init(x))
713 {
714 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
715 }
716 else if (process::is_merge(x))
717 {
718 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::merge>(x));
719 }
720 else if (process::is_left_merge(x))
721 {
722 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
723 }
724 else if (process::is_choice(x))
725 {
726 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::choice>(x));
727 }
729 {
730 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
731 }
733 {
734 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
735 }
736 static_cast<Derived&>(*this).leave(x);
737 }
738
739};
740
742template <typename Derived>
743struct data_expression_builder: public add_data_expressions<data::data_expression_builder, Derived>
744{
745};
746//--- end generated add_data_expressions code ---//
747
748//--- start generated add_variables code ---//
749template <template <class> class Builder, class Derived>
750struct add_variables: public Builder<Derived>
751{
752 typedef Builder<Derived> super;
753 using super::enter;
754 using super::leave;
755 using super::update;
756 using super::apply;
757
759 {
760 static_cast<Derived&>(*this).enter(x);
761 static_cast<Derived&>(*this).update(x.global_variables());
762 static_cast<Derived&>(*this).update(x.equations());
763 process_expression result_init;
764 static_cast<Derived&>(*this).apply(result_init, x.init());
765 x.init() = result_init;
766 static_cast<Derived&>(*this).leave(x);
767 }
768
769 template <class T>
770 void apply(T& result, const process::process_identifier& x)
771 {
772
773 static_cast<Derived&>(*this).enter(x);
774 process::make_process_identifier(result, x.name(), [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); });
775 static_cast<Derived&>(*this).leave(x);
776 }
777
778 template <class T>
779 void apply(T& result, const process::process_equation& x)
780 {
781
782 static_cast<Derived&>(*this).enter(x);
783 process::make_process_equation(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.formal_parameters()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.expression()); });
784 static_cast<Derived&>(*this).leave(x);
785 }
786
787 template <class T>
788 void apply(T& result, const process::untyped_multi_action& x)
789 {
790
791 static_cast<Derived&>(*this).enter(x);
792 process::make_untyped_multi_action(result, [&](data::untyped_data_parameter_list& result){ static_cast<Derived&>(*this).apply(result, x.actions()); });
793 static_cast<Derived&>(*this).leave(x);
794 }
795
796 template <class T>
797 void apply(T& result, const process::action& x)
798 {
799
800 static_cast<Derived&>(*this).enter(x);
801 process::make_action(result, x.label(), [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.arguments()); });
802 static_cast<Derived&>(*this).leave(x);
803 }
804
805 template <class T>
806 void apply(T& result, const process::process_instance& x)
807 {
808
809 static_cast<Derived&>(*this).enter(x);
810 process::make_process_instance(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::data_expression_list& result){ static_cast<Derived&>(*this).apply(result, x.actual_parameters()); });
811 static_cast<Derived&>(*this).leave(x);
812 }
813
814 template <class T>
816 {
817
818 static_cast<Derived&>(*this).enter(x);
819 process::make_process_instance_assignment(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, [&](data::assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
820 static_cast<Derived&>(*this).leave(x);
821 }
822
823 template <class T>
824 void apply(T& result, const process::delta& x)
825 {
826
827 result = x;
828 static_cast<Derived&>(*this).enter(x);
829 // skip
830 static_cast<Derived&>(*this).leave(x);
831 result = x;
832 }
833
834 template <class T>
835 void apply(T& result, const process::tau& x)
836 {
837
838 result = x;
839 static_cast<Derived&>(*this).enter(x);
840 // skip
841 static_cast<Derived&>(*this).leave(x);
842 result = x;
843 }
844
845 template <class T>
846 void apply(T& result, const process::sum& x)
847 {
848
849 static_cast<Derived&>(*this).enter(x);
850 process::make_sum(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
851 static_cast<Derived&>(*this).leave(x);
852 }
853
854 template <class T>
855 void apply(T& result, const process::block& x)
856 {
857
858 static_cast<Derived&>(*this).enter(x);
859 process::make_block(result, x.block_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
860 static_cast<Derived&>(*this).leave(x);
861 }
862
863 template <class T>
864 void apply(T& result, const process::hide& x)
865 {
866
867 static_cast<Derived&>(*this).enter(x);
868 process::make_hide(result, x.hide_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
869 static_cast<Derived&>(*this).leave(x);
870 }
871
872 template <class T>
873 void apply(T& result, const process::rename& x)
874 {
875
876 static_cast<Derived&>(*this).enter(x);
877 process::make_rename(result, x.rename_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
878 static_cast<Derived&>(*this).leave(x);
879 }
880
881 template <class T>
882 void apply(T& result, const process::comm& x)
883 {
884
885 static_cast<Derived&>(*this).enter(x);
886 process::make_comm(result, x.comm_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
887 static_cast<Derived&>(*this).leave(x);
888 }
889
890 template <class T>
891 void apply(T& result, const process::allow& x)
892 {
893
894 static_cast<Derived&>(*this).enter(x);
895 process::make_allow(result, x.allow_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
896 static_cast<Derived&>(*this).leave(x);
897 }
898
899 template <class T>
900 void apply(T& result, const process::sync& x)
901 {
902
903 static_cast<Derived&>(*this).enter(x);
904 process::make_sync(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
905 static_cast<Derived&>(*this).leave(x);
906 }
907
908 template <class T>
909 void apply(T& result, const process::at& x)
910 {
911
912 static_cast<Derived&>(*this).enter(x);
913 process::make_at(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.time_stamp()); });
914 static_cast<Derived&>(*this).leave(x);
915 }
916
917 template <class T>
918 void apply(T& result, const process::seq& x)
919 {
920
921 static_cast<Derived&>(*this).enter(x);
922 process::make_seq(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
923 static_cast<Derived&>(*this).leave(x);
924 }
925
926 template <class T>
927 void apply(T& result, const process::if_then& x)
928 {
929
930 static_cast<Derived&>(*this).enter(x);
931 process::make_if_then(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); });
932 static_cast<Derived&>(*this).leave(x);
933 }
934
935 template <class T>
936 void apply(T& result, const process::if_then_else& x)
937 {
938
939 static_cast<Derived&>(*this).enter(x);
940 process::make_if_then_else(result, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.condition()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.else_case()); });
941 static_cast<Derived&>(*this).leave(x);
942 }
943
944 template <class T>
945 void apply(T& result, const process::bounded_init& x)
946 {
947
948 static_cast<Derived&>(*this).enter(x);
949 process::make_bounded_init(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
950 static_cast<Derived&>(*this).leave(x);
951 }
952
953 template <class T>
954 void apply(T& result, const process::merge& x)
955 {
956
957 static_cast<Derived&>(*this).enter(x);
958 process::make_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
959 static_cast<Derived&>(*this).leave(x);
960 }
961
962 template <class T>
963 void apply(T& result, const process::left_merge& x)
964 {
965
966 static_cast<Derived&>(*this).enter(x);
967 process::make_left_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
968 static_cast<Derived&>(*this).leave(x);
969 }
970
971 template <class T>
972 void apply(T& result, const process::choice& x)
973 {
974
975 static_cast<Derived&>(*this).enter(x);
976 process::make_choice(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
977 static_cast<Derived&>(*this).leave(x);
978 }
979
980 template <class T>
981 void apply(T& result, const process::stochastic_operator& x)
982 {
983
984 static_cast<Derived&>(*this).enter(x);
985 process::make_stochastic_operator(result, [&](data::variable_list& result){ static_cast<Derived&>(*this).apply(result, x.variables()); }, [&](data::data_expression& result){ static_cast<Derived&>(*this).apply(result, x.distribution()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
986 static_cast<Derived&>(*this).leave(x);
987 }
988
989 template <class T>
991 {
992
993 static_cast<Derived&>(*this).enter(x);
994 process::make_untyped_process_assignment(result, x.name(), [&](data::untyped_identifier_assignment_list& result){ static_cast<Derived&>(*this).apply(result, x.assignments()); });
995 static_cast<Derived&>(*this).leave(x);
996 }
997
998 template <class T>
999 void apply(T& result, const process::process_expression& x)
1000 {
1001
1002 static_cast<Derived&>(*this).enter(x);
1004 {
1005 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1006 }
1007 else if (process::is_action(x))
1008 {
1009 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::action>(x));
1010 }
1011 else if (process::is_process_instance(x))
1012 {
1013 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1014 }
1016 {
1017 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1018 }
1019 else if (process::is_delta(x))
1020 {
1021 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1022 }
1023 else if (process::is_tau(x))
1024 {
1025 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1026 }
1027 else if (process::is_sum(x))
1028 {
1029 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1030 }
1031 else if (process::is_block(x))
1032 {
1033 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::block>(x));
1034 }
1035 else if (process::is_hide(x))
1036 {
1037 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1038 }
1039 else if (process::is_rename(x))
1040 {
1041 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1042 }
1043 else if (process::is_comm(x))
1044 {
1045 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1046 }
1047 else if (process::is_allow(x))
1048 {
1049 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1050 }
1051 else if (process::is_sync(x))
1052 {
1053 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1054 }
1055 else if (process::is_at(x))
1056 {
1057 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::at>(x));
1058 }
1059 else if (process::is_seq(x))
1060 {
1061 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1062 }
1063 else if (process::is_if_then(x))
1064 {
1065 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1066 }
1067 else if (process::is_if_then_else(x))
1068 {
1069 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1070 }
1071 else if (process::is_bounded_init(x))
1072 {
1073 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1074 }
1075 else if (process::is_merge(x))
1076 {
1077 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1078 }
1079 else if (process::is_left_merge(x))
1080 {
1081 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1082 }
1083 else if (process::is_choice(x))
1084 {
1085 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1086 }
1088 {
1089 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1090 }
1092 {
1093 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1094 }
1095 static_cast<Derived&>(*this).leave(x);
1096 }
1097
1098};
1099
1101template <typename Derived>
1102struct variable_builder: public add_variables<data::data_expression_builder, Derived>
1103{
1104};
1105//--- end generated add_variables code ---//
1106
1107// Adds process expression traversal to a builder
1108//--- start generated add_process_expressions code ---//
1109template <template <class> class Builder, class Derived>
1110struct add_process_expressions: public Builder<Derived>
1111{
1112 typedef Builder<Derived> super;
1113 using super::enter;
1114 using super::leave;
1115 using super::update;
1116 using super::apply;
1117
1119 {
1120 static_cast<Derived&>(*this).enter(x);
1121 static_cast<Derived&>(*this).update(x.equations());
1122 process_expression result_init;
1123 static_cast<Derived&>(*this).apply(result_init, x.init());
1124 x.init() = result_init;
1125 static_cast<Derived&>(*this).leave(x);
1126 }
1127
1128 template <class T>
1129 void apply(T& result, const process::process_equation& x)
1130 {
1131
1132 static_cast<Derived&>(*this).enter(x);
1133 process::make_process_equation(result, x.identifier(), x.formal_parameters(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.expression()); });
1134 static_cast<Derived&>(*this).leave(x);
1135 }
1136
1137 template <class T>
1138 void apply(T& result, const process::action& x)
1139 {
1140
1141 result = x;
1142 static_cast<Derived&>(*this).enter(x);
1143 // skip
1144 static_cast<Derived&>(*this).leave(x);
1145 result = x;
1146 }
1147
1148 template <class T>
1149 void apply(T& result, const process::process_instance& x)
1150 {
1151
1152 result = x;
1153 static_cast<Derived&>(*this).enter(x);
1154 // skip
1155 static_cast<Derived&>(*this).leave(x);
1156 result = x;
1157 }
1158
1159 template <class T>
1161 {
1162
1163 result = x;
1164 static_cast<Derived&>(*this).enter(x);
1165 // skip
1166 static_cast<Derived&>(*this).leave(x);
1167 result = x;
1168 }
1169
1170 template <class T>
1171 void apply(T& result, const process::delta& x)
1172 {
1173
1174 result = x;
1175 static_cast<Derived&>(*this).enter(x);
1176 // skip
1177 static_cast<Derived&>(*this).leave(x);
1178 result = x;
1179 }
1180
1181 template <class T>
1182 void apply(T& result, const process::tau& x)
1183 {
1184
1185 result = x;
1186 static_cast<Derived&>(*this).enter(x);
1187 // skip
1188 static_cast<Derived&>(*this).leave(x);
1189 result = x;
1190 }
1191
1192 template <class T>
1193 void apply(T& result, const process::sum& x)
1194 {
1195
1196 static_cast<Derived&>(*this).enter(x);
1197 process::make_sum(result, x.variables(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1198 static_cast<Derived&>(*this).leave(x);
1199 }
1200
1201 template <class T>
1202 void apply(T& result, const process::block& x)
1203 {
1204
1205 static_cast<Derived&>(*this).enter(x);
1206 process::make_block(result, x.block_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1207 static_cast<Derived&>(*this).leave(x);
1208 }
1209
1210 template <class T>
1211 void apply(T& result, const process::hide& x)
1212 {
1213
1214 static_cast<Derived&>(*this).enter(x);
1215 process::make_hide(result, x.hide_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1216 static_cast<Derived&>(*this).leave(x);
1217 }
1218
1219 template <class T>
1220 void apply(T& result, const process::rename& x)
1221 {
1222
1223 static_cast<Derived&>(*this).enter(x);
1224 process::make_rename(result, x.rename_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1225 static_cast<Derived&>(*this).leave(x);
1226 }
1227
1228 template <class T>
1229 void apply(T& result, const process::comm& x)
1230 {
1231
1232 static_cast<Derived&>(*this).enter(x);
1233 process::make_comm(result, x.comm_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1234 static_cast<Derived&>(*this).leave(x);
1235 }
1236
1237 template <class T>
1238 void apply(T& result, const process::allow& x)
1239 {
1240
1241 static_cast<Derived&>(*this).enter(x);
1242 process::make_allow(result, x.allow_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1243 static_cast<Derived&>(*this).leave(x);
1244 }
1245
1246 template <class T>
1247 void apply(T& result, const process::sync& x)
1248 {
1249
1250 static_cast<Derived&>(*this).enter(x);
1251 process::make_sync(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1252 static_cast<Derived&>(*this).leave(x);
1253 }
1254
1255 template <class T>
1256 void apply(T& result, const process::at& x)
1257 {
1258
1259 static_cast<Derived&>(*this).enter(x);
1260 process::make_at(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, x.time_stamp());
1261 static_cast<Derived&>(*this).leave(x);
1262 }
1263
1264 template <class T>
1265 void apply(T& result, const process::seq& x)
1266 {
1267
1268 static_cast<Derived&>(*this).enter(x);
1269 process::make_seq(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1270 static_cast<Derived&>(*this).leave(x);
1271 }
1272
1273 template <class T>
1274 void apply(T& result, const process::if_then& x)
1275 {
1276
1277 static_cast<Derived&>(*this).enter(x);
1278 process::make_if_then(result, x.condition(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); });
1279 static_cast<Derived&>(*this).leave(x);
1280 }
1281
1282 template <class T>
1283 void apply(T& result, const process::if_then_else& x)
1284 {
1285
1286 static_cast<Derived&>(*this).enter(x);
1287 process::make_if_then_else(result, x.condition(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.else_case()); });
1288 static_cast<Derived&>(*this).leave(x);
1289 }
1290
1291 template <class T>
1292 void apply(T& result, const process::bounded_init& x)
1293 {
1294
1295 static_cast<Derived&>(*this).enter(x);
1296 process::make_bounded_init(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1297 static_cast<Derived&>(*this).leave(x);
1298 }
1299
1300 template <class T>
1301 void apply(T& result, const process::merge& x)
1302 {
1303
1304 static_cast<Derived&>(*this).enter(x);
1305 process::make_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1306 static_cast<Derived&>(*this).leave(x);
1307 }
1308
1309 template <class T>
1310 void apply(T& result, const process::left_merge& x)
1311 {
1312
1313 static_cast<Derived&>(*this).enter(x);
1314 process::make_left_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1315 static_cast<Derived&>(*this).leave(x);
1316 }
1317
1318 template <class T>
1319 void apply(T& result, const process::choice& x)
1320 {
1321
1322 static_cast<Derived&>(*this).enter(x);
1323 process::make_choice(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1324 static_cast<Derived&>(*this).leave(x);
1325 }
1326
1327 template <class T>
1328 void apply(T& result, const process::stochastic_operator& x)
1329 {
1330
1331 static_cast<Derived&>(*this).enter(x);
1332 process::make_stochastic_operator(result, x.variables(), x.distribution(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1333 static_cast<Derived&>(*this).leave(x);
1334 }
1335
1336 template <class T>
1338 {
1339
1340 result = x;
1341 static_cast<Derived&>(*this).enter(x);
1342 // skip
1343 static_cast<Derived&>(*this).leave(x);
1344 result = x;
1345 }
1346
1347 template <class T>
1348 void apply(T& result, const process::process_expression& x)
1349 {
1350
1351 static_cast<Derived&>(*this).enter(x);
1353 {
1354 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1355 }
1356 else if (process::is_action(x))
1357 {
1358 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::action>(x));
1359 }
1360 else if (process::is_process_instance(x))
1361 {
1362 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1363 }
1365 {
1366 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1367 }
1368 else if (process::is_delta(x))
1369 {
1370 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1371 }
1372 else if (process::is_tau(x))
1373 {
1374 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1375 }
1376 else if (process::is_sum(x))
1377 {
1378 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1379 }
1380 else if (process::is_block(x))
1381 {
1382 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::block>(x));
1383 }
1384 else if (process::is_hide(x))
1385 {
1386 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1387 }
1388 else if (process::is_rename(x))
1389 {
1390 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1391 }
1392 else if (process::is_comm(x))
1393 {
1394 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1395 }
1396 else if (process::is_allow(x))
1397 {
1398 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1399 }
1400 else if (process::is_sync(x))
1401 {
1402 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1403 }
1404 else if (process::is_at(x))
1405 {
1406 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::at>(x));
1407 }
1408 else if (process::is_seq(x))
1409 {
1410 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1411 }
1412 else if (process::is_if_then(x))
1413 {
1414 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1415 }
1416 else if (process::is_if_then_else(x))
1417 {
1418 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1419 }
1420 else if (process::is_bounded_init(x))
1421 {
1422 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1423 }
1424 else if (process::is_merge(x))
1425 {
1426 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1427 }
1428 else if (process::is_left_merge(x))
1429 {
1430 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1431 }
1432 else if (process::is_choice(x))
1433 {
1434 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1435 }
1437 {
1438 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1439 }
1441 {
1442 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1443 }
1444 static_cast<Derived&>(*this).leave(x);
1445 }
1446
1447};
1448
1450template <typename Derived>
1451struct process_expression_builder: public add_process_expressions<core::builder, Derived>
1452{
1453};
1454//--- end generated add_process_expressions code ---//
1455
1456//--- start generated add_process_identifiers code ---//
1457template <template <class> class Builder, class Derived>
1458struct add_process_identifiers: public Builder<Derived>
1459{
1460 typedef Builder<Derived> super;
1461 using super::enter;
1462 using super::leave;
1463 using super::update;
1464 using super::apply;
1465
1467 {
1468 static_cast<Derived&>(*this).enter(x);
1469 static_cast<Derived&>(*this).update(x.equations());
1470 process_expression result_init;
1471 static_cast<Derived&>(*this).apply(result_init, x.init());
1472 x.init() = result_init;
1473 static_cast<Derived&>(*this).leave(x);
1474 }
1475
1476 template <class T>
1477 void apply(T& result, const process::process_identifier& x)
1478 {
1479
1480 result = x;
1481 static_cast<Derived&>(*this).enter(x);
1482 // skip
1483 static_cast<Derived&>(*this).leave(x);
1484 result = x;
1485 }
1486
1487 template <class T>
1488 void apply(T& result, const process::process_equation& x)
1489 {
1490
1491 static_cast<Derived&>(*this).enter(x);
1492 process::make_process_equation(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, x.formal_parameters(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.expression()); });
1493 static_cast<Derived&>(*this).leave(x);
1494 }
1495
1496 template <class T>
1497 void apply(T& result, const process::action& x)
1498 {
1499
1500 result = x;
1501 static_cast<Derived&>(*this).enter(x);
1502 // skip
1503 static_cast<Derived&>(*this).leave(x);
1504 result = x;
1505 }
1506
1507 template <class T>
1508 void apply(T& result, const process::process_instance& x)
1509 {
1510
1511 static_cast<Derived&>(*this).enter(x);
1512 process::make_process_instance(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, x.actual_parameters());
1513 static_cast<Derived&>(*this).leave(x);
1514 }
1515
1516 template <class T>
1518 {
1519
1520 static_cast<Derived&>(*this).enter(x);
1521 process::make_process_instance_assignment(result, [&](process_identifier& result){ static_cast<Derived&>(*this).apply(result, x.identifier()); }, x.assignments());
1522 static_cast<Derived&>(*this).leave(x);
1523 }
1524
1525 template <class T>
1526 void apply(T& result, const process::delta& x)
1527 {
1528
1529 result = x;
1530 static_cast<Derived&>(*this).enter(x);
1531 // skip
1532 static_cast<Derived&>(*this).leave(x);
1533 result = x;
1534 }
1535
1536 template <class T>
1537 void apply(T& result, const process::tau& x)
1538 {
1539
1540 result = x;
1541 static_cast<Derived&>(*this).enter(x);
1542 // skip
1543 static_cast<Derived&>(*this).leave(x);
1544 result = x;
1545 }
1546
1547 template <class T>
1548 void apply(T& result, const process::sum& x)
1549 {
1550
1551 static_cast<Derived&>(*this).enter(x);
1552 process::make_sum(result, x.variables(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1553 static_cast<Derived&>(*this).leave(x);
1554 }
1555
1556 template <class T>
1557 void apply(T& result, const process::block& x)
1558 {
1559
1560 static_cast<Derived&>(*this).enter(x);
1561 process::make_block(result, x.block_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1562 static_cast<Derived&>(*this).leave(x);
1563 }
1564
1565 template <class T>
1566 void apply(T& result, const process::hide& x)
1567 {
1568
1569 static_cast<Derived&>(*this).enter(x);
1570 process::make_hide(result, x.hide_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1571 static_cast<Derived&>(*this).leave(x);
1572 }
1573
1574 template <class T>
1575 void apply(T& result, const process::rename& x)
1576 {
1577
1578 static_cast<Derived&>(*this).enter(x);
1579 process::make_rename(result, x.rename_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1580 static_cast<Derived&>(*this).leave(x);
1581 }
1582
1583 template <class T>
1584 void apply(T& result, const process::comm& x)
1585 {
1586
1587 static_cast<Derived&>(*this).enter(x);
1588 process::make_comm(result, x.comm_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1589 static_cast<Derived&>(*this).leave(x);
1590 }
1591
1592 template <class T>
1593 void apply(T& result, const process::allow& x)
1594 {
1595
1596 static_cast<Derived&>(*this).enter(x);
1597 process::make_allow(result, x.allow_set(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1598 static_cast<Derived&>(*this).leave(x);
1599 }
1600
1601 template <class T>
1602 void apply(T& result, const process::sync& x)
1603 {
1604
1605 static_cast<Derived&>(*this).enter(x);
1606 process::make_sync(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1607 static_cast<Derived&>(*this).leave(x);
1608 }
1609
1610 template <class T>
1611 void apply(T& result, const process::at& x)
1612 {
1613
1614 static_cast<Derived&>(*this).enter(x);
1615 process::make_at(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); }, x.time_stamp());
1616 static_cast<Derived&>(*this).leave(x);
1617 }
1618
1619 template <class T>
1620 void apply(T& result, const process::seq& x)
1621 {
1622
1623 static_cast<Derived&>(*this).enter(x);
1624 process::make_seq(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1625 static_cast<Derived&>(*this).leave(x);
1626 }
1627
1628 template <class T>
1629 void apply(T& result, const process::if_then& x)
1630 {
1631
1632 static_cast<Derived&>(*this).enter(x);
1633 process::make_if_then(result, x.condition(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); });
1634 static_cast<Derived&>(*this).leave(x);
1635 }
1636
1637 template <class T>
1638 void apply(T& result, const process::if_then_else& x)
1639 {
1640
1641 static_cast<Derived&>(*this).enter(x);
1642 process::make_if_then_else(result, x.condition(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.then_case()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.else_case()); });
1643 static_cast<Derived&>(*this).leave(x);
1644 }
1645
1646 template <class T>
1647 void apply(T& result, const process::bounded_init& x)
1648 {
1649
1650 static_cast<Derived&>(*this).enter(x);
1651 process::make_bounded_init(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1652 static_cast<Derived&>(*this).leave(x);
1653 }
1654
1655 template <class T>
1656 void apply(T& result, const process::merge& x)
1657 {
1658
1659 static_cast<Derived&>(*this).enter(x);
1660 process::make_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1661 static_cast<Derived&>(*this).leave(x);
1662 }
1663
1664 template <class T>
1665 void apply(T& result, const process::left_merge& x)
1666 {
1667
1668 static_cast<Derived&>(*this).enter(x);
1669 process::make_left_merge(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1670 static_cast<Derived&>(*this).leave(x);
1671 }
1672
1673 template <class T>
1674 void apply(T& result, const process::choice& x)
1675 {
1676
1677 static_cast<Derived&>(*this).enter(x);
1678 process::make_choice(result, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.left()); }, [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.right()); });
1679 static_cast<Derived&>(*this).leave(x);
1680 }
1681
1682 template <class T>
1683 void apply(T& result, const process::stochastic_operator& x)
1684 {
1685
1686 static_cast<Derived&>(*this).enter(x);
1687 process::make_stochastic_operator(result, x.variables(), x.distribution(), [&](process_expression& result){ static_cast<Derived&>(*this).apply(result, x.operand()); });
1688 static_cast<Derived&>(*this).leave(x);
1689 }
1690
1691 template <class T>
1693 {
1694
1695 result = x;
1696 static_cast<Derived&>(*this).enter(x);
1697 // skip
1698 static_cast<Derived&>(*this).leave(x);
1699 result = x;
1700 }
1701
1702 template <class T>
1703 void apply(T& result, const process::process_expression& x)
1704 {
1705
1706 static_cast<Derived&>(*this).enter(x);
1708 {
1709 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<data::untyped_data_parameter>(x));
1710 }
1711 else if (process::is_action(x))
1712 {
1713 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::action>(x));
1714 }
1715 else if (process::is_process_instance(x))
1716 {
1717 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance>(x));
1718 }
1720 {
1721 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::process_instance_assignment>(x));
1722 }
1723 else if (process::is_delta(x))
1724 {
1725 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::delta>(x));
1726 }
1727 else if (process::is_tau(x))
1728 {
1729 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::tau>(x));
1730 }
1731 else if (process::is_sum(x))
1732 {
1733 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sum>(x));
1734 }
1735 else if (process::is_block(x))
1736 {
1737 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::block>(x));
1738 }
1739 else if (process::is_hide(x))
1740 {
1741 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::hide>(x));
1742 }
1743 else if (process::is_rename(x))
1744 {
1745 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::rename>(x));
1746 }
1747 else if (process::is_comm(x))
1748 {
1749 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::comm>(x));
1750 }
1751 else if (process::is_allow(x))
1752 {
1753 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::allow>(x));
1754 }
1755 else if (process::is_sync(x))
1756 {
1757 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::sync>(x));
1758 }
1759 else if (process::is_at(x))
1760 {
1761 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::at>(x));
1762 }
1763 else if (process::is_seq(x))
1764 {
1765 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::seq>(x));
1766 }
1767 else if (process::is_if_then(x))
1768 {
1769 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then>(x));
1770 }
1771 else if (process::is_if_then_else(x))
1772 {
1773 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::if_then_else>(x));
1774 }
1775 else if (process::is_bounded_init(x))
1776 {
1777 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::bounded_init>(x));
1778 }
1779 else if (process::is_merge(x))
1780 {
1781 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::merge>(x));
1782 }
1783 else if (process::is_left_merge(x))
1784 {
1785 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::left_merge>(x));
1786 }
1787 else if (process::is_choice(x))
1788 {
1789 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::choice>(x));
1790 }
1792 {
1793 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::stochastic_operator>(x));
1794 }
1796 {
1797 static_cast<Derived&>(*this).apply(result, atermpp::down_cast<process::untyped_process_assignment>(x));
1798 }
1799 static_cast<Derived&>(*this).leave(x);
1800 }
1801
1802};
1803
1805template <typename Derived>
1806struct process_identifier_builder: public add_process_identifiers<core::builder, Derived>
1807{
1808};
1809//--- end generated add_process_identifiers code ---//
1810
1811} // namespace process
1812
1813} // namespace mcrl2
1814
1815#endif // MCRL2_PROCESS_BUILDER_H
A list of aterm objects.
Definition aterm_list.h:24
\brief An action label
const core::identifier_string & name() const
const data::data_expression_list & arguments() const
const action_label & label() const
\brief The allow operator
const action_name_multiset_list & allow_set() const
\brief The at operator
const data::data_expression & time_stamp() const
const process_expression & operand() const
\brief The block operator
const core::identifier_string_list & block_set() const
\brief The bounded initialization
const process_expression & right() const
const process_expression & left() const
\brief The choice operator
const process_expression & left() const
const process_expression & right() const
\brief The communication operator
const communication_expression_list & comm_set() const
\brief The value delta
\brief The hide operator
const core::identifier_string_list & hide_set() const
\brief The if-then-else operator
const process_expression & else_case() const
const process_expression & then_case() const
const data::data_expression & condition() const
\brief The if-then operator
const process_expression & then_case() const
const data::data_expression & condition() const
\brief The left merge operator
const process_expression & right() const
const process_expression & left() const
\brief The merge operator
const process_expression & right() const
const process_expression & left() const
\brief A process equation
const data::variable_list & formal_parameters() const
const process_identifier & identifier() const
const process_expression & expression() const
\brief A process expression
\brief A process identifier
const core::identifier_string & name() const
const data::assignment_list & assignments() const
const process_identifier & identifier() const
const data::data_expression_list & actual_parameters() const
const process_identifier & identifier() const
Process specification consisting of a data specification, action labels, a sequence of process equati...
const std::vector< process_equation > & equations() const
Returns the equations of the process specification.
const process_expression & init() const
Returns the initialization of the process specification.
const process::action_label_list & action_labels() const
Returns the action label specification.
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the process specification.
\brief The rename operator
const rename_expression_list & rename_set() const
\brief The sequential composition
const process_expression & right() const
const process_expression & left() const
\brief The distribution operator
const data::variable_list & variables() const
const data::data_expression & distribution() const
const process_expression & operand() const
\brief The sum operator
const process_expression & operand() const
const data::variable_list & variables() const
\brief The synchronization operator
const process_expression & left() const
const process_expression & right() const
\brief The value tau
\brief An untyped multi action or data application
const data::untyped_data_parameter_list & actions() const
\brief An untyped process assginment
const core::identifier_string & name() const
add your file description here.
bool is_untyped_data_parameter(const atermpp::aterm &x)
bool is_at(const atermpp::aterm &x)
void make_allow(atermpp::aterm &t, const ARGUMENTS &... args)
void make_choice(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_identifier(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_process_instance(const atermpp::aterm &x)
void make_merge(atermpp::aterm &t, const ARGUMENTS &... args)
void make_at(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_process_instance_assignment(const atermpp::aterm &x)
bool is_tau(const atermpp::aterm &x)
void make_action(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_seq(const atermpp::aterm &x)
void make_sync(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_merge(const atermpp::aterm &x)
void make_if_then_else(atermpp::aterm &t, const ARGUMENTS &... args)
void make_hide(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_allow(const atermpp::aterm &x)
void make_if_then(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_bounded_init(const atermpp::aterm &x)
bool is_delta(const atermpp::aterm &x)
void make_block(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sum(const atermpp::aterm &x)
bool is_block(const atermpp::aterm &x)
bool is_if_then_else(const atermpp::aterm &x)
void make_action_label(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_comm(const atermpp::aterm &x)
bool is_action(const atermpp::aterm &x)
bool is_left_merge(const atermpp::aterm &x)
void make_stochastic_operator(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_hide(const atermpp::aterm &x)
bool is_if_then(const atermpp::aterm &x)
void make_untyped_process_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_instance_assignment(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_choice(const atermpp::aterm &x)
void make_comm(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_stochastic_operator(const atermpp::aterm &x)
void make_untyped_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
void make_bounded_init(atermpp::aterm &t, const ARGUMENTS &... args)
void make_process_equation(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_rename(const atermpp::aterm &x)
bool is_untyped_process_assignment(const atermpp::aterm &x)
void make_rename(atermpp::aterm &t, const ARGUMENTS &... args)
void make_seq(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sync(const atermpp::aterm &x)
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
void make_left_merge(atermpp::aterm &t, const ARGUMENTS &... args)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Definition indexed_set.h:72
add your file description here.
void apply(T &result, const process::process_equation &x)
Definition builder.h:420
void apply(T &result, const process::rename &x)
Definition builder.h:514
void apply(T &result, const process::left_merge &x)
Definition builder.h:604
void apply(T &result, const process::bounded_init &x)
Definition builder.h:586
void apply(T &result, const process::process_expression &x)
Definition builder.h:640
void apply(T &result, const process::block &x)
Definition builder.h:496
void apply(T &result, const process::merge &x)
Definition builder.h:595
void apply(T &result, const process::sync &x)
Definition builder.h:541
void apply(T &result, const process::choice &x)
Definition builder.h:613
void apply(T &result, const process::if_then &x)
Definition builder.h:568
void apply(T &result, const process::action &x)
Definition builder.h:438
void apply(T &result, const process::delta &x)
Definition builder.h:465
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:456
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:631
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:622
void update(process::process_specification &x)
Definition builder.h:409
void apply(T &result, const process::allow &x)
Definition builder.h:532
void apply(T &result, const process::at &x)
Definition builder.h:550
void apply(T &result, const process::sum &x)
Definition builder.h:487
void apply(T &result, const process::seq &x)
Definition builder.h:559
void apply(T &result, const process::tau &x)
Definition builder.h:476
void apply(T &result, const process::comm &x)
Definition builder.h:523
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:429
void apply(T &result, const process::hide &x)
Definition builder.h:505
void apply(T &result, const process::if_then_else &x)
Definition builder.h:577
void apply(T &result, const process::process_instance &x)
Definition builder.h:447
void apply(T &result, const process::sync &x)
Definition builder.h:1247
void apply(T &result, const process::rename &x)
Definition builder.h:1220
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1283
void apply(T &result, const process::process_equation &x)
Definition builder.h:1129
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1292
void apply(T &result, const process::at &x)
Definition builder.h:1256
void apply(T &result, const process::if_then &x)
Definition builder.h:1274
void apply(T &result, const process::choice &x)
Definition builder.h:1319
void apply(T &result, const process::tau &x)
Definition builder.h:1182
void apply(T &result, const process::merge &x)
Definition builder.h:1301
void apply(T &result, const process::left_merge &x)
Definition builder.h:1310
void apply(T &result, const process::sum &x)
Definition builder.h:1193
void apply(T &result, const process::seq &x)
Definition builder.h:1265
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1337
void apply(T &result, const process::block &x)
Definition builder.h:1202
void apply(T &result, const process::allow &x)
Definition builder.h:1238
void apply(T &result, const process::action &x)
Definition builder.h:1138
void apply(T &result, const process::hide &x)
Definition builder.h:1211
void apply(T &result, const process::process_expression &x)
Definition builder.h:1348
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1160
void apply(T &result, const process::comm &x)
Definition builder.h:1229
void apply(T &result, const process::delta &x)
Definition builder.h:1171
void apply(T &result, const process::process_instance &x)
Definition builder.h:1149
void update(process::process_specification &x)
Definition builder.h:1118
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1328
void apply(T &result, const process::process_expression &x)
Definition builder.h:1703
void apply(T &result, const process::process_identifier &x)
Definition builder.h:1477
void apply(T &result, const process::process_instance &x)
Definition builder.h:1508
void apply(T &result, const process::delta &x)
Definition builder.h:1526
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:1517
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:1683
void apply(T &result, const process::choice &x)
Definition builder.h:1674
void apply(T &result, const process::at &x)
Definition builder.h:1611
void apply(T &result, const process::merge &x)
Definition builder.h:1656
void apply(T &result, const process::if_then &x)
Definition builder.h:1629
void apply(T &result, const process::comm &x)
Definition builder.h:1584
void apply(T &result, const process::process_equation &x)
Definition builder.h:1488
void apply(T &result, const process::left_merge &x)
Definition builder.h:1665
void apply(T &result, const process::sync &x)
Definition builder.h:1602
void apply(T &result, const process::tau &x)
Definition builder.h:1537
void update(process::process_specification &x)
Definition builder.h:1466
void apply(T &result, const process::hide &x)
Definition builder.h:1566
void apply(T &result, const process::if_then_else &x)
Definition builder.h:1638
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:1692
void apply(T &result, const process::rename &x)
Definition builder.h:1575
void apply(T &result, const process::seq &x)
Definition builder.h:1620
void apply(T &result, const process::block &x)
Definition builder.h:1557
void apply(T &result, const process::sum &x)
Definition builder.h:1548
void apply(T &result, const process::bounded_init &x)
Definition builder.h:1647
void apply(T &result, const process::action &x)
Definition builder.h:1497
void apply(T &result, const process::allow &x)
Definition builder.h:1593
void update(process::process_specification &x)
Definition builder.h:46
void apply(T &result, const process::sync &x)
Definition builder.h:191
void apply(T &result, const process::choice &x)
Definition builder.h:263
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:106
void apply(T &result, const process::process_instance &x)
Definition builder.h:97
void apply(T &result, const process::merge &x)
Definition builder.h:245
void apply(T &result, const process::seq &x)
Definition builder.h:209
void apply(T &result, const process::if_then &x)
Definition builder.h:218
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:79
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:272
void apply(T &result, const process::action &x)
Definition builder.h:88
void apply(T &result, const process::delta &x)
Definition builder.h:115
void apply(T &result, const process::if_then_else &x)
Definition builder.h:227
void apply(T &result, const process::left_merge &x)
Definition builder.h:254
void apply(T &result, const process::process_equation &x)
Definition builder.h:70
void apply(T &result, const process::hide &x)
Definition builder.h:155
void apply(T &result, const process::allow &x)
Definition builder.h:182
void apply(T &result, const process::rename &x)
Definition builder.h:164
void apply(T &result, const process::comm &x)
Definition builder.h:173
void apply(T &result, const process::sum &x)
Definition builder.h:137
void apply(T &result, const process::bounded_init &x)
Definition builder.h:236
void apply(T &result, const process::action_label &x)
Definition builder.h:38
void apply(T &result, const process::block &x)
Definition builder.h:146
void apply(T &result, const process::at &x)
Definition builder.h:200
void apply(T &result, const process::tau &x)
Definition builder.h:126
void apply(T &result, const process::process_identifier &x)
Definition builder.h:61
void apply(T &result, const process::process_expression &x)
Definition builder.h:290
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:281
void apply(T &result, const process::process_instance &x)
Definition builder.h:806
void apply(T &result, const process::choice &x)
Definition builder.h:972
void apply(T &result, const process::sync &x)
Definition builder.h:900
void apply(T &result, const process::sum &x)
Definition builder.h:846
void apply(T &result, const process::stochastic_operator &x)
Definition builder.h:981
void apply(T &result, const process::untyped_process_assignment &x)
Definition builder.h:990
void apply(T &result, const process::allow &x)
Definition builder.h:891
void apply(T &result, const process::bounded_init &x)
Definition builder.h:945
void apply(T &result, const process::comm &x)
Definition builder.h:882
void apply(T &result, const process::block &x)
Definition builder.h:855
void apply(T &result, const process::tau &x)
Definition builder.h:835
void apply(T &result, const process::action &x)
Definition builder.h:797
void apply(T &result, const process::left_merge &x)
Definition builder.h:963
void apply(T &result, const process::untyped_multi_action &x)
Definition builder.h:788
void apply(T &result, const process::merge &x)
Definition builder.h:954
void apply(T &result, const process::seq &x)
Definition builder.h:918
void apply(T &result, const process::delta &x)
Definition builder.h:824
void apply(T &result, const process::hide &x)
Definition builder.h:864
void apply(T &result, const process::at &x)
Definition builder.h:909
Builder< Derived > super
Definition builder.h:752
void apply(T &result, const process::process_identifier &x)
Definition builder.h:770
void apply(T &result, const process::if_then_else &x)
Definition builder.h:936
void update(process::process_specification &x)
Definition builder.h:758
void apply(T &result, const process::process_equation &x)
Definition builder.h:779
void apply(T &result, const process::process_instance_assignment &x)
Definition builder.h:815
void apply(T &result, const process::rename &x)
Definition builder.h:873
void apply(T &result, const process::if_then &x)
Definition builder.h:927
void apply(T &result, const process::process_expression &x)
Definition builder.h:999
\brief Builder class
Definition builder.h:1103
add your file description here.