LCOV - code coverage report
Current view: top level - process/include/mcrl2/process - traverser.h (source / functions) Hit Total Coverage
Test: mcrl2_coverage.info.cleaned Lines: 516 967 53.4 %
Date: 2024-04-19 03:43:27 Functions: 127 365 34.8 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14