12#ifndef MCRL2_LPS_BUILDER_H
13#define MCRL2_LPS_BUILDER_H
26template <
template <
class>
class Builder,
class Derived>
37 static_cast<Derived&
>(*this).enter(x);
39 static_cast<Derived&
>(*this).apply(result_time, x.
time());
40 x.
time() = result_time;
41 static_cast<Derived&
>(*this).leave(x);
48 static_cast<Derived&
>(*this).enter(x);
50 static_cast<Derived&
>(*this).leave(x);
55 static_cast<Derived&
>(*this).enter(x);
60 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
62 static_cast<Derived&
>(*this).update(x.
deadlock());
63 static_cast<Derived&
>(*this).leave(x);
68 static_cast<Derived&
>(*this).enter(x);
73 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
76 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
79 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
81 static_cast<Derived&
>(*this).leave(x);
88 static_cast<Derived&
>(*this).enter(x);
90 static_cast<Derived&
>(*this).leave(x);
95 static_cast<Derived&
>(*this).enter(x);
101 static_cast<Derived&
>(*this).leave(x);
106 static_cast<Derived&
>(*this).enter(x);
108 static_cast<Derived&
>(*this).apply(result_action_labels, x.
action_labels());
111 static_cast<Derived&
>(*this).update(x.
process());
113 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
115 static_cast<Derived&
>(*this).leave(x);
122 static_cast<Derived&
>(*this).enter(x);
124 static_cast<Derived&
>(*this).leave(x);
129 static_cast<Derived&
>(*this).enter(x);
134 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
137 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
140 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
143 static_cast<Derived&
>(*this).apply(result_distribution, x.
distribution());
145 static_cast<Derived&
>(*this).leave(x);
150 static_cast<Derived&
>(*this).enter(x);
152 static_cast<Derived&
>(*this).apply(result_process_parameters, x.
process_parameters());
156 static_cast<Derived&
>(*this).leave(x);
161 static_cast<Derived&
>(*this).enter(x);
163 static_cast<Derived&
>(*this).apply(result_action_labels, x.
action_labels());
166 static_cast<Derived&
>(*this).update(x.
process());
168 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
170 static_cast<Derived&
>(*this).leave(x);
177 static_cast<Derived&
>(*this).enter(x);
179 static_cast<Derived&
>(*this).leave(x);
185template <
typename Derived>
193template <
template <
class>
class Builder,
class Derived>
204 static_cast<Derived&
>(*this).enter(x);
206 static_cast<Derived&
>(*this).apply(result_time, x.
time());
207 x.
time() = result_time;
208 static_cast<Derived&
>(*this).leave(x);
215 static_cast<Derived&
>(*this).enter(x);
217 static_cast<Derived&
>(*this).leave(x);
222 static_cast<Derived&
>(*this).enter(x);
224 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
226 static_cast<Derived&
>(*this).update(x.
deadlock());
227 static_cast<Derived&
>(*this).leave(x);
232 static_cast<Derived&
>(*this).enter(x);
234 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
237 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
240 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
242 static_cast<Derived&
>(*this).leave(x);
249 static_cast<Derived&
>(*this).enter(x);
251 static_cast<Derived&
>(*this).leave(x);
256 static_cast<Derived&
>(*this).enter(x);
259 static_cast<Derived&
>(*this).leave(x);
264 static_cast<Derived&
>(*this).enter(x);
265 static_cast<Derived&
>(*this).update(x.
process());
267 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
269 static_cast<Derived&
>(*this).leave(x);
276 static_cast<Derived&
>(*this).enter(x);
278 static_cast<Derived&
>(*this).leave(x);
283 static_cast<Derived&
>(*this).enter(x);
285 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
288 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
291 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
294 static_cast<Derived&
>(*this).apply(result_distribution, x.
distribution());
296 static_cast<Derived&
>(*this).leave(x);
301 static_cast<Derived&
>(*this).enter(x);
304 static_cast<Derived&
>(*this).leave(x);
309 static_cast<Derived&
>(*this).enter(x);
310 static_cast<Derived&
>(*this).update(x.
process());
312 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
314 static_cast<Derived&
>(*this).leave(x);
321 static_cast<Derived&
>(*this).enter(x);
323 static_cast<Derived&
>(*this).leave(x);
329template <
typename Derived>
336template <
template <
class>
class Builder,
class Derived>
347 static_cast<Derived&
>(*this).enter(x);
349 static_cast<Derived&
>(*this).apply(result_time, x.
time());
350 x.
time() = result_time;
351 static_cast<Derived&
>(*this).leave(x);
358 static_cast<Derived&
>(*this).enter(x);
360 static_cast<Derived&
>(*this).leave(x);
365 static_cast<Derived&
>(*this).enter(x);
370 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
372 static_cast<Derived&
>(*this).update(x.
deadlock());
373 static_cast<Derived&
>(*this).leave(x);
378 static_cast<Derived&
>(*this).enter(x);
383 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
386 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
389 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
391 static_cast<Derived&
>(*this).leave(x);
398 static_cast<Derived&
>(*this).enter(x);
400 static_cast<Derived&
>(*this).leave(x);
405 static_cast<Derived&
>(*this).enter(x);
407 static_cast<Derived&
>(*this).apply(result_process_parameters, x.
process_parameters());
411 static_cast<Derived&
>(*this).leave(x);
416 static_cast<Derived&
>(*this).enter(x);
418 static_cast<Derived&
>(*this).update(x.
process());
420 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
422 static_cast<Derived&
>(*this).leave(x);
429 static_cast<Derived&
>(*this).enter(x);
431 static_cast<Derived&
>(*this).leave(x);
436 static_cast<Derived&
>(*this).enter(x);
441 static_cast<Derived&
>(*this).apply(result_condition, x.
condition());
444 static_cast<Derived&
>(*this).apply(result_multi_action, x.
multi_action());
447 static_cast<Derived&
>(*this).apply(result_assignments, x.
assignments());
450 static_cast<Derived&
>(*this).apply(result_distribution, x.
distribution());
452 static_cast<Derived&
>(*this).leave(x);
457 static_cast<Derived&
>(*this).enter(x);
459 static_cast<Derived&
>(*this).apply(result_process_parameters, x.
process_parameters());
463 static_cast<Derived&
>(*this).leave(x);
468 static_cast<Derived&
>(*this).enter(x);
470 static_cast<Derived&
>(*this).update(x.
process());
472 static_cast<Derived&
>(*this).apply(result_initial_process, x.
initial_process());
474 static_cast<Derived&
>(*this).leave(x);
481 static_cast<Derived&
>(*this).enter(x);
483 static_cast<Derived&
>(*this).leave(x);
489template <
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.
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
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.
void make_stochastic_distribution(atermpp::aterm &t, const ARGUMENTS &... args)
void make_stochastic_process_initializer(atermpp::aterm &t, ARGUMENTS... args)
void make_process_initializer(atermpp::aterm &t, EXPRESSION_LIST args)
void make_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void update(lps::action_summand &x)
void apply(T &result, const lps::stochastic_process_initializer &x)
void update(lps::linear_process &x)
void apply(T &result, const lps::multi_action &x)
void apply(T &result, const lps::stochastic_distribution &x)
void update(lps::specification &x)
void update(lps::deadlock &x)
void update(lps::stochastic_linear_process &x)
void apply(T &result, const lps::process_initializer &x)
void update(lps::stochastic_action_summand &x)
void update(lps::deadlock_summand &x)
void update(lps::stochastic_specification &x)
void update(lps::deadlock &x)
void update(lps::stochastic_specification &x)
void update(lps::specification &x)
void apply(T &result, const lps::process_initializer &x)
void apply(T &result, const lps::stochastic_process_initializer &x)
void update(lps::action_summand &x)
void apply(T &result, const lps::stochastic_distribution &x)
void update(lps::stochastic_linear_process &x)
void update(lps::stochastic_action_summand &x)
void apply(T &result, const lps::multi_action &x)
void update(lps::linear_process &x)
void update(lps::deadlock_summand &x)
void update(lps::action_summand &x)
void update(lps::deadlock &x)
void apply(T &result, const lps::multi_action &x)
void apply(T &result, const lps::stochastic_process_initializer &x)
void update(lps::specification &x)
void apply(T &result, const lps::stochastic_distribution &x)
void update(lps::linear_process &x)
void update(lps::stochastic_action_summand &x)
void update(lps::stochastic_specification &x)
void apply(T &result, const lps::process_initializer &x)
void update(lps::stochastic_linear_process &x)
void update(lps::deadlock_summand &x)