14#ifndef MCRL2_LPS_TRAVERSER_H
15#define MCRL2_LPS_TRAVERSER_H
27template <
template <
class>
class Traverser,
class Derived>
30 typedef Traverser<Derived>
super;
37 static_cast<Derived&
>(*this).enter(x);
40 static_cast<Derived&
>(*this).apply(x.
time());
42 static_cast<Derived&
>(*this).leave(x);
47 static_cast<Derived&
>(*this).enter(x);
48 static_cast<Derived&
>(*this).apply(x.
actions());
51 static_cast<Derived&
>(*this).apply(x.
time());
53 static_cast<Derived&
>(*this).leave(x);
58 static_cast<Derived&
>(*this).enter(x);
60 static_cast<Derived&
>(*this).apply(x.
condition());
61 static_cast<Derived&
>(*this).apply(x.
deadlock());
62 static_cast<Derived&
>(*this).leave(x);
67 static_cast<Derived&
>(*this).enter(x);
69 static_cast<Derived&
>(*this).apply(x.
condition());
71 static_cast<Derived&
>(*this).apply(x.
assignments());
72 static_cast<Derived&
>(*this).leave(x);
77 static_cast<Derived&
>(*this).enter(x);
78 static_cast<Derived&
>(*this).apply(x.
expressions());
79 static_cast<Derived&
>(*this).leave(x);
84 static_cast<Derived&
>(*this).enter(x);
88 static_cast<Derived&
>(*this).leave(x);
93 static_cast<Derived&
>(*this).enter(x);
96 static_cast<Derived&
>(*this).apply(x.
process());
98 static_cast<Derived&
>(*this).leave(x);
103 static_cast<Derived&
>(*this).enter(x);
104 static_cast<Derived&
>(*this).apply(x.
variables());
106 static_cast<Derived&
>(*this).leave(x);
111 static_cast<Derived&
>(*this).enter(x);
113 static_cast<Derived&
>(*this).apply(x.
condition());
115 static_cast<Derived&
>(*this).apply(x.
assignments());
117 static_cast<Derived&
>(*this).leave(x);
122 static_cast<Derived&
>(*this).enter(x);
126 static_cast<Derived&
>(*this).leave(x);
131 static_cast<Derived&
>(*this).enter(x);
134 static_cast<Derived&
>(*this).apply(x.
process());
136 static_cast<Derived&
>(*this).leave(x);
141 static_cast<Derived&
>(*this).enter(x);
142 static_cast<Derived&
>(*this).apply(x.
expressions());
144 static_cast<Derived&
>(*this).leave(x);
150template <
typename Derived>
157template <
template <
class>
class Traverser,
class Derived>
167 static_cast<Derived&
>(*this).enter(x);
170 static_cast<Derived&
>(*this).apply(x.
time());
172 static_cast<Derived&
>(*this).leave(x);
177 static_cast<Derived&
>(*this).enter(x);
178 static_cast<Derived&
>(*this).apply(x.
actions());
181 static_cast<Derived&
>(*this).apply(x.
time());
183 static_cast<Derived&
>(*this).leave(x);
188 static_cast<Derived&
>(*this).enter(x);
189 static_cast<Derived&
>(*this).apply(x.
condition());
190 static_cast<Derived&
>(*this).apply(x.
deadlock());
191 static_cast<Derived&
>(*this).leave(x);
196 static_cast<Derived&
>(*this).enter(x);
197 static_cast<Derived&
>(*this).apply(x.
condition());
199 static_cast<Derived&
>(*this).apply(x.
assignments());
200 static_cast<Derived&
>(*this).leave(x);
205 static_cast<Derived&
>(*this).enter(x);
206 static_cast<Derived&
>(*this).apply(x.
expressions());
207 static_cast<Derived&
>(*this).leave(x);
212 static_cast<Derived&
>(*this).enter(x);
215 static_cast<Derived&
>(*this).leave(x);
220 static_cast<Derived&
>(*this).enter(x);
221 static_cast<Derived&
>(*this).apply(x.
process());
223 static_cast<Derived&
>(*this).leave(x);
228 static_cast<Derived&
>(*this).enter(x);
230 static_cast<Derived&
>(*this).leave(x);
235 static_cast<Derived&
>(*this).enter(x);
236 static_cast<Derived&
>(*this).apply(x.
condition());
238 static_cast<Derived&
>(*this).apply(x.
assignments());
240 static_cast<Derived&
>(*this).leave(x);
245 static_cast<Derived&
>(*this).enter(x);
248 static_cast<Derived&
>(*this).leave(x);
253 static_cast<Derived&
>(*this).enter(x);
254 static_cast<Derived&
>(*this).apply(x.
process());
256 static_cast<Derived&
>(*this).leave(x);
261 static_cast<Derived&
>(*this).enter(x);
262 static_cast<Derived&
>(*this).apply(x.
expressions());
264 static_cast<Derived&
>(*this).leave(x);
270template <
typename Derived>
277template <
template <
class>
class Traverser,
class Derived>
287 static_cast<Derived&
>(*this).enter(x);
290 static_cast<Derived&
>(*this).apply(x.
time());
292 static_cast<Derived&
>(*this).leave(x);
297 static_cast<Derived&
>(*this).enter(x);
298 static_cast<Derived&
>(*this).apply(x.
actions());
301 static_cast<Derived&
>(*this).apply(x.
time());
303 static_cast<Derived&
>(*this).leave(x);
308 static_cast<Derived&
>(*this).enter(x);
310 static_cast<Derived&
>(*this).apply(x.
condition());
311 static_cast<Derived&
>(*this).apply(x.
deadlock());
312 static_cast<Derived&
>(*this).leave(x);
317 static_cast<Derived&
>(*this).enter(x);
319 static_cast<Derived&
>(*this).apply(x.
condition());
321 static_cast<Derived&
>(*this).apply(x.
assignments());
322 static_cast<Derived&
>(*this).leave(x);
327 static_cast<Derived&
>(*this).enter(x);
328 static_cast<Derived&
>(*this).apply(x.
expressions());
329 static_cast<Derived&
>(*this).leave(x);
334 static_cast<Derived&
>(*this).enter(x);
338 static_cast<Derived&
>(*this).leave(x);
343 static_cast<Derived&
>(*this).enter(x);
345 static_cast<Derived&
>(*this).apply(x.
process());
347 static_cast<Derived&
>(*this).leave(x);
352 static_cast<Derived&
>(*this).enter(x);
353 static_cast<Derived&
>(*this).apply(x.
variables());
355 static_cast<Derived&
>(*this).leave(x);
360 static_cast<Derived&
>(*this).enter(x);
362 static_cast<Derived&
>(*this).apply(x.
condition());
364 static_cast<Derived&
>(*this).apply(x.
assignments());
366 static_cast<Derived&
>(*this).leave(x);
371 static_cast<Derived&
>(*this).enter(x);
375 static_cast<Derived&
>(*this).leave(x);
380 static_cast<Derived&
>(*this).enter(x);
382 static_cast<Derived&
>(*this).apply(x.
process());
384 static_cast<Derived&
>(*this).leave(x);
389 static_cast<Derived&
>(*this).enter(x);
390 static_cast<Derived&
>(*this).apply(x.
expressions());
392 static_cast<Derived&
>(*this).leave(x);
398template <
typename Derived>
405template <
template <
class>
class Traverser,
class Derived>
415 static_cast<Derived&
>(*this).enter(x);
418 static_cast<Derived&
>(*this).apply(x.
time());
420 static_cast<Derived&
>(*this).leave(x);
425 static_cast<Derived&
>(*this).enter(x);
426 static_cast<Derived&
>(*this).apply(x.
actions());
429 static_cast<Derived&
>(*this).apply(x.
time());
431 static_cast<Derived&
>(*this).leave(x);
436 static_cast<Derived&
>(*this).enter(x);
438 static_cast<Derived&
>(*this).apply(x.
condition());
439 static_cast<Derived&
>(*this).apply(x.
deadlock());
440 static_cast<Derived&
>(*this).leave(x);
445 static_cast<Derived&
>(*this).enter(x);
447 static_cast<Derived&
>(*this).apply(x.
condition());
449 static_cast<Derived&
>(*this).apply(x.
assignments());
450 static_cast<Derived&
>(*this).leave(x);
455 static_cast<Derived&
>(*this).enter(x);
456 static_cast<Derived&
>(*this).apply(x.
expressions());
457 static_cast<Derived&
>(*this).leave(x);
462 static_cast<Derived&
>(*this).enter(x);
466 static_cast<Derived&
>(*this).leave(x);
471 static_cast<Derived&
>(*this).enter(x);
474 static_cast<Derived&
>(*this).apply(x.
process());
476 static_cast<Derived&
>(*this).leave(x);
481 static_cast<Derived&
>(*this).enter(x);
482 static_cast<Derived&
>(*this).apply(x.
variables());
484 static_cast<Derived&
>(*this).leave(x);
489 static_cast<Derived&
>(*this).enter(x);
491 static_cast<Derived&
>(*this).apply(x.
condition());
493 static_cast<Derived&
>(*this).apply(x.
assignments());
495 static_cast<Derived&
>(*this).leave(x);
500 static_cast<Derived&
>(*this).enter(x);
504 static_cast<Derived&
>(*this).leave(x);
509 static_cast<Derived&
>(*this).enter(x);
512 static_cast<Derived&
>(*this).apply(x.
process());
514 static_cast<Derived&
>(*this).leave(x);
519 static_cast<Derived&
>(*this).enter(x);
520 static_cast<Derived&
>(*this).apply(x.
expressions());
522 static_cast<Derived&
>(*this).leave(x);
528template <
typename Derived>
535template <
template <
class>
class Traverser,
class Derived>
545 static_cast<Derived&
>(*this).enter(x);
546 static_cast<Derived&
>(*this).apply(x.
actions());
547 static_cast<Derived&
>(*this).leave(x);
552 static_cast<Derived&
>(*this).enter(x);
554 static_cast<Derived&
>(*this).leave(x);
559 static_cast<Derived&
>(*this).enter(x);
561 static_cast<Derived&
>(*this).leave(x);
566 static_cast<Derived&
>(*this).enter(x);
568 static_cast<Derived&
>(*this).apply(x.
process());
569 static_cast<Derived&
>(*this).leave(x);
574 static_cast<Derived&
>(*this).enter(x);
576 static_cast<Derived&
>(*this).leave(x);
581 static_cast<Derived&
>(*this).enter(x);
583 static_cast<Derived&
>(*this).leave(x);
588 static_cast<Derived&
>(*this).enter(x);
590 static_cast<Derived&
>(*this).apply(x.
process());
591 static_cast<Derived&
>(*this).leave(x);
597template <
typename Derived>
LPS summand containing a multi-action.
const lps::multi_action & multi_action() const
Returns the multi-action of this summand.
const data::assignment_list & assignments() const
Returns the sequence of assignments.
LPS summand containing a deadlock.
const lps::deadlock & deadlock() const
Returns the deadlock of this summand.
bool has_time() const
Returns true if time is available.
const data::data_expression & time() const
Returns the time.
const std::vector< ActionSummand > & action_summands() const
Returns the sequence of action summands.
const deadlock_summand_vector & deadlock_summands() const
Returns the sequence of deadlock summands.
const data::variable_list & process_parameters() const
Returns the sequence of process parameters.
\brief A timed multi-action
bool has_time() const
Returns true if time is available.
const process::action_list & actions() const
const data::data_expression & time() const
data::data_expression_list expressions() const
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the LPS.
const process::action_label_list & action_labels() const
Returns a sequence of action labels. This sequence contains all action labels occurring in the specif...
const InitialProcessExpression & initial_process() const
Returns the initial process.
const LinearProcess & process() const
Returns the linear process of the specification.
Linear process specification.
LPS summand containing a multi-action.
const stochastic_distribution & distribution() const
Returns the distribution of this summand.
\brief A stochastic distribution
const data::variable_list & variables() const
bool is_defined() const
Returns true if the distribution is defined, i.e. it contains a valid distribution....
const data::data_expression & distribution() const
A stochastic process initializer.
const stochastic_distribution & distribution() const
Linear process specification.
const data::data_expression & condition() const
Returns the condition expression.
data::variable_list & summation_variables()
Returns the sequence of summation variables.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(const lps::action_summand &x)
void apply(const lps::multi_action &x)
void apply(const lps::specification &x)
void apply(const lps::stochastic_action_summand &x)
void apply(const lps::stochastic_linear_process &x)
void apply(const lps::stochastic_specification &x)
Traverser< Derived > super
void apply(const lps::linear_process &x)
void apply(const lps::stochastic_linear_process &x)
void apply(const lps::multi_action &x)
void apply(const lps::deadlock &x)
void apply(const lps::stochastic_specification &x)
void apply(const lps::specification &x)
void apply(const lps::deadlock_summand &x)
void apply(const lps::action_summand &x)
Traverser< Derived > super
void apply(const lps::stochastic_action_summand &x)
void apply(const lps::stochastic_distribution &x)
void apply(const lps::linear_process &x)
void apply(const lps::stochastic_process_initializer &x)
void apply(const lps::process_initializer &x)
void apply(const lps::stochastic_linear_process &x)
void apply(const lps::stochastic_action_summand &x)
void apply(const lps::action_summand &x)
void apply(const lps::specification &x)
void apply(const lps::process_initializer &x)
void apply(const lps::stochastic_distribution &x)
Traverser< Derived > super
void apply(const lps::linear_process &x)
void apply(const lps::deadlock_summand &x)
void apply(const lps::stochastic_process_initializer &x)
void apply(const lps::stochastic_specification &x)
void apply(const lps::multi_action &x)
void apply(const lps::deadlock &x)
void apply(const lps::stochastic_action_summand &x)
void apply(const lps::stochastic_linear_process &x)
void apply(const lps::stochastic_specification &x)
void apply(const lps::stochastic_process_initializer &x)
void apply(const lps::stochastic_distribution &x)
void apply(const lps::multi_action &x)
void apply(const lps::process_initializer &x)
void apply(const lps::action_summand &x)
void apply(const lps::specification &x)
void apply(const lps::deadlock_summand &x)
void apply(const lps::deadlock &x)
Traverser< Derived > super
void apply(const lps::linear_process &x)
void apply(const lps::linear_process &x)
void apply(const lps::specification &x)
void apply(const lps::stochastic_process_initializer &x)
void apply(const lps::deadlock &x)
void apply(const lps::stochastic_linear_process &x)
void apply(const lps::multi_action &x)
void apply(const lps::action_summand &x)
void apply(const lps::stochastic_action_summand &x)
void apply(const lps::deadlock_summand &x)
void apply(const lps::stochastic_distribution &x)
void apply(const lps::stochastic_specification &x)
Traverser< Derived > super
void apply(const lps::process_initializer &x)