stage4/generate_cc/generate_cc_sfc.cc
changeset 19 cee3c4e5afe2
parent 18 e6af5eb5f546
child 21 ae19aa4ff2d9
equal deleted inserted replaced
18:e6af5eb5f546 19:cee3c4e5afe2
    36 /***********************************************************************/
    36 /***********************************************************************/
    37 /***********************************************************************/
    37 /***********************************************************************/
    38 /***********************************************************************/
    38 /***********************************************************************/
    39 /***********************************************************************/
    39 /***********************************************************************/
    40 
    40 
       
    41 class transition_element {
       
    42   
       
    43   private:
       
    44     transition_c *transition;
       
    45     char priority;
       
    46     char index;
       
    47     transition_element *prev;
       
    48     transition_element *next;
       
    49 
       
    50   public:
       
    51     transition_element(transition_c *tr, char pr, char idx) {
       
    52       transition = tr;
       
    53       priority = pr;
       
    54       index = idx;
       
    55     }
       
    56 
       
    57     void set_prev(transition_element *tr) {prev = tr;}
       
    58     void set_next(transition_element *tr) {next = tr;}
       
    59     transition_element *get_prev(void) {return prev;}
       
    60     transition_element *get_next(void) {return next;}
       
    61     transition_c *get_transition(void) {return transition;}
       
    62     char get_priority(void) {return priority;}
       
    63     char get_index(void) {return index;}
       
    64 };
       
    65 
       
    66 
       
    67 
       
    68 
       
    69 /***********************************************************************/
       
    70 /***********************************************************************/
       
    71 /***********************************************************************/
       
    72 /***********************************************************************/
       
    73 
       
    74 class generate_cc_sfc_transitionresetsteps_c: public generate_cc_base_c {
       
    75   
       
    76   private:
       
    77     char transition_number;
       
    78   
       
    79   public:
       
    80     generate_cc_sfc_transitionresetsteps_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
       
    81     : generate_cc_base_c(s4o_ptr) {
       
    82       this->set_variable_prefix(variable_prefix);
       
    83     }
       
    84     
       
    85     void set_transition_number(char number) {transition_number = number;}
       
    86     void reset_transition_number(void) {transition_number = 0;}
       
    87     void print_transition_number(void) {
       
    88       char str[10];
       
    89       sprintf(str, "%d", transition_number);
       
    90       s4o.print(str);
       
    91     }
       
    92     
       
    93     void print_step_argument(symbol_c *step_name, const char* argument) {
       
    94       print_variable_prefix();
       
    95       s4o.print("step_list[");
       
    96       s4o.print(SFC_STEP_ACTION_PREFIX);
       
    97       step_name->accept(*this);
       
    98       s4o.print("].");
       
    99       s4o.print(argument);
       
   100     }
       
   101 
       
   102     void print_reset_step(symbol_c *step_name) {
       
   103       s4o.print(s4o.indent_spaces);
       
   104       print_step_argument(step_name, "state");
       
   105       s4o.print(" = 0;\n" + s4o.indent_spaces);
       
   106       print_step_argument(step_name, "elapsed_time");
       
   107       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
       
   108     }
       
   109 
       
   110 /*********************************************/
       
   111 /* B.1.6  Sequential function chart elements */
       
   112 /*********************************************/
       
   113     
       
   114     void *visit(initial_step_c *symbol) {return NULL;}
       
   115     
       
   116     void *visit(step_c *symbol) {return NULL;}
       
   117 
       
   118     void *visit(transition_c *symbol) {
       
   119       if (symbol->integer == NULL) {
       
   120         s4o.print(s4o.indent_spaces + "if (");
       
   121         print_variable_prefix();
       
   122         s4o.print("transition_list[");
       
   123         print_transition_number();
       
   124         s4o.print("]) {\n");
       
   125         s4o.indent_right();
       
   126         symbol->from_steps->accept(*this);
       
   127         s4o.indent_left();
       
   128         s4o.print(s4o.indent_spaces + "}\n");
       
   129       }
       
   130       transition_number++;
       
   131       return NULL;
       
   132     }
       
   133     
       
   134     void *visit(steps_c *symbol) {
       
   135       if (symbol->step_name != NULL) {
       
   136         print_reset_step(symbol->step_name);
       
   137       }
       
   138       if (symbol->step_name_list != NULL) {
       
   139         symbol->step_name_list->accept(*this);
       
   140       }
       
   141       return NULL;
       
   142     }
       
   143     
       
   144     void *visit(step_name_list_c *symbol) {
       
   145       for(int i = 0; i < symbol->n; i++) {
       
   146         print_reset_step(symbol->elements[i]);
       
   147       }
       
   148       return NULL;
       
   149     }
       
   150     
       
   151     void *visit(action_c *symbol) {return NULL;}
       
   152 
       
   153 }; /* generate_cc_sfc_transitionresetsteps_c */
       
   154       
       
   155 
       
   156 
       
   157 
       
   158 /***********************************************************************/
       
   159 /***********************************************************************/
       
   160 /***********************************************************************/
       
   161 /***********************************************************************/
       
   162 
       
   163 class generate_cc_sfc_transitionsetsteps_c: public generate_cc_base_c {
       
   164   
       
   165   private:
       
   166     char transition_number;
       
   167   
       
   168   public:
       
   169     generate_cc_sfc_transitionsetsteps_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
       
   170     : generate_cc_base_c(s4o_ptr) {
       
   171       this->set_variable_prefix(variable_prefix);
       
   172     }
       
   173     
       
   174     void reset_transition_number(void) {transition_number = 0;}
       
   175     void print_transition_number(void) {
       
   176       char str[10];
       
   177       sprintf(str, "%d", transition_number);
       
   178       s4o.print(str);
       
   179     }
       
   180     
       
   181     void print_step_argument(symbol_c *step_name, const char* argument) {
       
   182       print_variable_prefix();
       
   183       s4o.print("step_list[");
       
   184       s4o.print(SFC_STEP_ACTION_PREFIX);
       
   185       step_name->accept(*this);
       
   186       s4o.print("].");
       
   187       s4o.print(argument);
       
   188     }
       
   189 
       
   190     void print_set_step(symbol_c *step_name) {
       
   191       s4o.print(s4o.indent_spaces);
       
   192       print_step_argument(step_name, "state");
       
   193       s4o.print(" = 1;\n");
       
   194     }
       
   195 
       
   196 /*********************************************/
       
   197 /* B.1.6  Sequential function chart elements */
       
   198 /*********************************************/
       
   199     
       
   200     void *visit(initial_step_c *symbol) {return NULL;}
       
   201     
       
   202     void *visit(step_c *symbol) {return NULL;}
       
   203 
       
   204     void *visit(transition_c *symbol) {
       
   205       s4o.print(s4o.indent_spaces + "if (");
       
   206       print_variable_prefix();
       
   207       s4o.print("transition_list[");
       
   208       print_transition_number();
       
   209       s4o.print("]) {\n");
       
   210       s4o.indent_right();
       
   211       symbol->to_steps->accept(*this);
       
   212       s4o.indent_left();
       
   213       s4o.print(s4o.indent_spaces + "}\n");
       
   214       transition_number++;
       
   215       return NULL;
       
   216     }
       
   217     
       
   218     void *visit(steps_c *symbol) {
       
   219       if (symbol->step_name != NULL) {
       
   220         print_set_step(symbol->step_name);
       
   221       }
       
   222       if (symbol->step_name_list != NULL) {
       
   223         symbol->step_name_list->accept(*this);
       
   224       }
       
   225       return NULL;
       
   226     }
       
   227     
       
   228     void *visit(step_name_list_c *symbol) {
       
   229       for(int i = 0; i < symbol->n; i++) {
       
   230         print_set_step(symbol->elements[i]);
       
   231       }
       
   232       return NULL;
       
   233     }
       
   234     
       
   235     void *visit(action_c *symbol) {return NULL;}
       
   236 
       
   237 }; /* generate_cc_sfc_transitionsetsteps_c */
       
   238 
       
   239 
       
   240 
       
   241 
       
   242 /***********************************************************************/
       
   243 /***********************************************************************/
       
   244 /***********************************************************************/
       
   245 /***********************************************************************/
       
   246 
    41 class generate_cc_sfc_transitiontest_c: public generate_cc_base_c {
   247 class generate_cc_sfc_transitiontest_c: public generate_cc_base_c {
    42   
   248   
    43   private:
   249   private:
    44     char transition_number;
   250     char transition_number;
    45   
   251   
    46   private:
   252   private:
    47     generate_cc_il_c *generate_cc_il;
   253     generate_cc_il_c *generate_cc_il;
    48     generate_cc_st_c *generate_cc_st;
   254     generate_cc_st_c *generate_cc_st;
       
   255     generate_cc_sfc_transitionresetsteps_c *generate_cc_sfc_transitionresetsteps;
    49     
   256     
    50   public:
   257   public:
    51     generate_cc_sfc_transitiontest_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
   258     generate_cc_sfc_transitiontest_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
    52     : generate_cc_base_c(s4o_ptr) {
   259     : generate_cc_base_c(s4o_ptr) {
    53       generate_cc_il = new generate_cc_il_c(s4o_ptr, scope, variable_prefix);
   260       generate_cc_il = new generate_cc_il_c(s4o_ptr, scope, variable_prefix);
    54       generate_cc_st = new generate_cc_st_c(s4o_ptr, scope, variable_prefix);
   261       generate_cc_st = new generate_cc_st_c(s4o_ptr, scope, variable_prefix);
       
   262       generate_cc_sfc_transitionresetsteps = new generate_cc_sfc_transitionresetsteps_c(s4o_ptr, scope, variable_prefix);
    55       this->set_variable_prefix(variable_prefix);
   263       this->set_variable_prefix(variable_prefix);
    56     }
   264     }
    57     
   265     
    58     ~generate_cc_sfc_transitiontest_c(void) {
   266     ~generate_cc_sfc_transitiontest_c(void) {
    59       delete generate_cc_il;
   267       delete generate_cc_il;
    60       delete generate_cc_st;
   268       delete generate_cc_st;
    61     }
   269       delete generate_cc_sfc_transitionresetsteps;
    62 
   270     }
    63     void reset_transition_number(void) {transition_number = 0;}
   271 
       
   272     void set_transition_number(char number) {transition_number = number;}
    64     void print_transition_number(void) {
   273     void print_transition_number(void) {
    65       char str[10];
   274       char str[10];
    66       sprintf(str, "%d", transition_number);
   275       sprintf(str, "%d", transition_number);
    67       s4o.print(str);
   276       s4o.print(str);
    68     }
   277     }
    74       step_name->accept(*this);
   283       step_name->accept(*this);
    75       s4o.print("].");
   284       s4o.print("].");
    76       s4o.print(argument);
   285       s4o.print(argument);
    77     }
   286     }
    78 
   287 
       
   288     void print_reset_step(symbol_c *step_name) {
       
   289       s4o.print(s4o.indent_spaces);
       
   290       print_step_argument(step_name, "state");
       
   291       s4o.print(" = 0;\n" + s4o.indent_spaces);
       
   292       print_step_argument(step_name, "elapsed_time");
       
   293       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
       
   294     }
       
   295 
    79 /*********************************************/
   296 /*********************************************/
    80 /* B.1.6  Sequential function chart elements */
   297 /* B.1.6  Sequential function chart elements */
    81 /*********************************************/
   298 /*********************************************/
    82     
   299     
    83     void *visit(initial_step_c *symbol) {return NULL;}
       
    84     
       
    85     void *visit(step_c *symbol) {return NULL;}
       
    86 
       
    87     void *visit(transition_c *symbol) {
   300     void *visit(transition_c *symbol) {
    88       s4o.print(s4o.indent_spaces + "if (");
   301       s4o.print(s4o.indent_spaces + "if (");
    89       symbol->from_steps->accept(*this);
   302       symbol->from_steps->accept(*this);
    90       s4o.print(") {\n");
   303       s4o.print(") {\n");
    91       s4o.indent_right();
   304       s4o.indent_right();
   108         print_transition_number();
   321         print_transition_number();
   109         s4o.print("] = ");
   322         s4o.print("] = ");
   110         symbol->transition_condition_st->accept(*generate_cc_st);
   323         symbol->transition_condition_st->accept(*generate_cc_st);
   111         s4o.print(";\n");
   324         s4o.print(";\n");
   112       }
   325       }
       
   326       if (symbol->integer != NULL) {
       
   327         s4o.print(s4o.indent_spaces + "if (");
       
   328         print_variable_prefix();
       
   329         s4o.print("transition_list[");
       
   330         print_transition_number();
       
   331         s4o.print("]) {\n");
       
   332         s4o.indent_right();
       
   333         symbol->from_steps->accept(*generate_cc_sfc_transitionresetsteps);
       
   334         s4o.indent_left();
       
   335         s4o.print(s4o.indent_spaces + "}\n");
       
   336       }
   113       s4o.indent_left();
   337       s4o.indent_left();
   114       s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces + "else {\n");
   338       s4o.print(s4o.indent_spaces + "}\n" + s4o.indent_spaces + "else {\n");
   115       s4o.indent_right();
   339       s4o.indent_right();
   116       s4o.print(s4o.indent_spaces);
   340       s4o.print(s4o.indent_spaces);
   117       print_variable_prefix();
   341       print_variable_prefix();
   142           s4o.print(" && ");
   366           s4o.print(" && ");
   143         }
   367         }
   144       }
   368       }
   145       return NULL;
   369       return NULL;
   146     }
   370     }
   147     
       
   148     void *visit(action_c *symbol) {return NULL;}
       
   149 
   371 
   150 }; /* generate_cc_sfc_transitiontest_c */
   372 }; /* generate_cc_sfc_transitiontest_c */
   151 
   373 
   152 
   374 
   153 
   375 
   155 /***********************************************************************/
   377 /***********************************************************************/
   156 /***********************************************************************/
   378 /***********************************************************************/
   157 /***********************************************************************/
   379 /***********************************************************************/
   158 /***********************************************************************/
   380 /***********************************************************************/
   159 
   381 
   160 class generate_cc_sfc_transitionresetsteps_c: public generate_cc_base_c {
   382 class generate_cc_sfc_transitionsort_c: public iterator_visitor_c {
   161   
   383   
   162   private:
   384   private:
   163     char transition_number;
   385     char transition_number;
   164   
   386     transition_element *first_transition;
       
   387     transition_element *last_transition;
       
   388   
       
   389   private:
       
   390     generate_cc_sfc_transitiontest_c *generate_cc_sfc_transitiontest;
       
   391     
   165   public:
   392   public:
   166     generate_cc_sfc_transitionresetsteps_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
   393     generate_cc_sfc_transitionsort_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL) {
   167     : generate_cc_base_c(s4o_ptr) {
   394       generate_cc_sfc_transitiontest = new generate_cc_sfc_transitiontest_c(s4o_ptr, scope, variable_prefix);
   168       this->set_variable_prefix(variable_prefix);
   395       first_transition = NULL;
       
   396       last_transition = NULL;
       
   397     }
       
   398 
       
   399     ~generate_cc_sfc_transitionsort_c(void) {
       
   400       delete generate_cc_sfc_transitiontest;
       
   401     }
       
   402     
       
   403     void append_transition(transition_c *transition, char priority, char index) {
       
   404       transition_element *new_transition = new transition_element(transition, priority, index);
       
   405       new_transition->set_prev(last_transition);
       
   406       if (last_transition != NULL) {
       
   407         last_transition->set_next(new_transition);
       
   408       }
       
   409       else {
       
   410         first_transition = new_transition;
       
   411       }
       
   412       last_transition = new_transition;
       
   413       transition_number++;
       
   414     }
       
   415     
       
   416     void sort_transitions(void) {
       
   417       int i, j;
       
   418       transition_element *current_transition;
       
   419       transition_element *next_transition;
       
   420       for (i = transition_number; i > 1; i--) {
       
   421         current_transition = first_transition;
       
   422         for (j = 0; j < i - 1; j++) {
       
   423           next_transition = current_transition->get_next();
       
   424           if (current_transition->get_priority() > next_transition->get_priority()) {
       
   425             if (current_transition->get_prev() != NULL) {
       
   426               current_transition->get_prev()->set_next(next_transition);
       
   427             }
       
   428             else {
       
   429               first_transition = next_transition;
       
   430             }
       
   431             if (next_transition->get_next() != NULL) {
       
   432               next_transition->get_next()->set_prev(current_transition);
       
   433             }
       
   434             else {
       
   435               last_transition = current_transition;
       
   436             }
       
   437             current_transition->set_next(next_transition->get_next());
       
   438             next_transition->set_prev(current_transition->get_prev());
       
   439             current_transition->set_prev(next_transition);
       
   440             next_transition->set_next(current_transition);
       
   441           }
       
   442           else {
       
   443             current_transition = next_transition;
       
   444           }
       
   445         }
       
   446       }
   169     }
   447     }
   170     
   448     
   171     void reset_transition_number(void) {transition_number = 0;}
   449     void reset_transition_number(void) {transition_number = 0;}
   172     void print_transition_number(void) {
   450     
   173       char str[10];
   451     void generate(symbol_c *symbol) {
   174       sprintf(str, "%d", transition_number);
   452       symbol->accept(*this);
   175       s4o.print(str);
   453       sort_transitions();
   176     }
   454       transition_element *next_transition = first_transition;
   177     
   455       while (next_transition != NULL) {
   178     void print_step_argument(symbol_c *step_name, const char* argument) {
   456         generate_cc_sfc_transitiontest->set_transition_number(next_transition->get_index());
   179       print_variable_prefix();
   457         next_transition->get_transition()->accept(*generate_cc_sfc_transitiontest);
   180       s4o.print("step_list[");
   458         next_transition = next_transition->get_next();
   181       s4o.print(SFC_STEP_ACTION_PREFIX);
   459       }
   182       step_name->accept(*this);
       
   183       s4o.print("].");
       
   184       s4o.print(argument);
       
   185     }
       
   186 
       
   187     void print_reset_step(symbol_c *step_name) {
       
   188       s4o.print(s4o.indent_spaces);
       
   189       print_step_argument(step_name, "state");
       
   190       s4o.print(" = 0;\n" + s4o.indent_spaces);
       
   191       print_step_argument(step_name, "elapsed_time");
       
   192       s4o.print(" = __time_to_timespec(1, 0, 0, 0, 0, 0);\n");
       
   193     }
   460     }
   194 
   461 
   195 /*********************************************/
   462 /*********************************************/
   196 /* B.1.6  Sequential function chart elements */
   463 /* B.1.6  Sequential function chart elements */
   197 /*********************************************/
   464 /*********************************************/
   198     
   465     
   199     void *visit(initial_step_c *symbol) {return NULL;}
   466     void *visit(initial_step_c *symbol) {return NULL;}
   200     
   467     
   201     void *visit(step_c *symbol) {return NULL;}
   468     void *visit(step_c *symbol) {return NULL;}
   202 
   469     
   203     void *visit(transition_c *symbol) {
   470     void *visit(transition_c *symbol) {
   204       s4o.print(s4o.indent_spaces + "if (");
   471       if (symbol->integer != NULL) {
   205       print_variable_prefix();
   472         append_transition(symbol, atoi(((token_c *)symbol->integer)->value), transition_number);
   206       s4o.print("transition_list[");
   473       }
   207       print_transition_number();
   474       else {
   208       s4o.print("]) {\n");
   475         append_transition(symbol, 0, transition_number);
   209       s4o.indent_right();
       
   210       symbol->from_steps->accept(*this);
       
   211       s4o.indent_left();
       
   212       s4o.print(s4o.indent_spaces + "}\n");
       
   213       transition_number++;
       
   214       return NULL;
       
   215     }
       
   216     
       
   217     void *visit(steps_c *symbol) {
       
   218       if (symbol->step_name != NULL) {
       
   219         print_reset_step(symbol->step_name);
       
   220       }
       
   221       if (symbol->step_name_list != NULL) {
       
   222         symbol->step_name_list->accept(*this);
       
   223       }
       
   224       return NULL;
       
   225     }
       
   226     
       
   227     void *visit(step_name_list_c *symbol) {
       
   228       for(int i = 0; i < symbol->n; i++) {
       
   229         print_reset_step(symbol->elements[i]);
       
   230       }
   476       }
   231       return NULL;
   477       return NULL;
   232     }
   478     }
   233     
   479     
   234     void *visit(action_c *symbol) {return NULL;}
   480     void *visit(action_c *symbol) {return NULL;}
   235 
   481 
   236 }; /* generate_cc_sfc_transitionresetsteps_c */
   482 };/* generate_cc_sfc_transitionsort_c */
   237       
       
   238 
       
   239 
       
   240 
       
   241 /***********************************************************************/
       
   242 /***********************************************************************/
       
   243 /***********************************************************************/
       
   244 /***********************************************************************/
       
   245 
       
   246 class generate_cc_sfc_transitionsetsteps_c: public generate_cc_base_c {
       
   247   
       
   248   private:
       
   249     char transition_number;
       
   250   
       
   251   public:
       
   252     generate_cc_sfc_transitionsetsteps_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
       
   253     : generate_cc_base_c(s4o_ptr) {
       
   254       this->set_variable_prefix(variable_prefix);
       
   255     }
       
   256     
       
   257     void reset_transition_number(void) {transition_number = 0;}
       
   258     void print_transition_number(void) {
       
   259       char str[10];
       
   260       sprintf(str, "%d", transition_number);
       
   261       s4o.print(str);
       
   262     }
       
   263     
       
   264     void print_step_argument(symbol_c *step_name, const char* argument) {
       
   265       print_variable_prefix();
       
   266       s4o.print("step_list[");
       
   267       s4o.print(SFC_STEP_ACTION_PREFIX);
       
   268       step_name->accept(*this);
       
   269       s4o.print("].");
       
   270       s4o.print(argument);
       
   271     }
       
   272 
       
   273     void print_set_step(symbol_c *step_name) {
       
   274       s4o.print(s4o.indent_spaces);
       
   275       print_step_argument(step_name, "state");
       
   276       s4o.print(" = 1;\n");
       
   277     }
       
   278 
       
   279 /*********************************************/
       
   280 /* B.1.6  Sequential function chart elements */
       
   281 /*********************************************/
       
   282     
       
   283     void *visit(initial_step_c *symbol) {return NULL;}
       
   284     
       
   285     void *visit(step_c *symbol) {return NULL;}
       
   286 
       
   287     void *visit(transition_c *symbol) {
       
   288       s4o.print(s4o.indent_spaces + "if (");
       
   289       print_variable_prefix();
       
   290       s4o.print("transition_list[");
       
   291       print_transition_number();
       
   292       s4o.print("]) {\n");
       
   293       s4o.indent_right();
       
   294       symbol->to_steps->accept(*this);
       
   295       s4o.indent_left();
       
   296       s4o.print(s4o.indent_spaces + "}\n");
       
   297       transition_number++;
       
   298       return NULL;
       
   299     }
       
   300     
       
   301     void *visit(steps_c *symbol) {
       
   302       if (symbol->step_name != NULL) {
       
   303         print_set_step(symbol->step_name);
       
   304       }
       
   305       if (symbol->step_name_list != NULL) {
       
   306         symbol->step_name_list->accept(*this);
       
   307       }
       
   308       return NULL;
       
   309     }
       
   310     
       
   311     void *visit(step_name_list_c *symbol) {
       
   312       for(int i = 0; i < symbol->n; i++) {
       
   313         print_set_step(symbol->elements[i]);
       
   314       }
       
   315       return NULL;
       
   316     }
       
   317     
       
   318     void *visit(action_c *symbol) {return NULL;}
       
   319 
       
   320 }; /* generate_cc_sfc_transitionsetsteps_c */
       
   321 
   483 
   322 
   484 
   323 
   485 
   324 
   486 
   325 /***********************************************************************/
   487 /***********************************************************************/
   570 /***********************************************************************/
   732 /***********************************************************************/
   571 
   733 
   572 class generate_cc_sfc_c: public generate_cc_typedecl_c {
   734 class generate_cc_sfc_c: public generate_cc_typedecl_c {
   573   
   735   
   574   private:
   736   private:
   575     generate_cc_sfc_transitiontest_c *generate_cc_sfc_transitiontest;
   737     generate_cc_sfc_transitionsort_c *generate_cc_sfc_transitionsort;
   576     generate_cc_sfc_transitionresetsteps_c *generate_cc_sfc_transitionresetsteps;
   738     generate_cc_sfc_transitionresetsteps_c *generate_cc_sfc_transitionresetsteps;
   577     generate_cc_sfc_transitionsetsteps_c *generate_cc_sfc_transitionsetsteps;
   739     generate_cc_sfc_transitionsetsteps_c *generate_cc_sfc_transitionsetsteps;
   578     generate_cc_sfc_stepassociation_c *generate_cc_sfc_stepassociation;
   740     generate_cc_sfc_stepassociation_c *generate_cc_sfc_stepassociation;
   579     generate_cc_sfc_actionexecution_c *generate_cc_sfc_actionexecution;
   741     generate_cc_sfc_actionexecution_c *generate_cc_sfc_actionexecution;
   580   
   742   
   581   public:
   743   public:
   582     generate_cc_sfc_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
   744     generate_cc_sfc_c(stage4out_c *s4o_ptr, symbol_c *scope, const char *variable_prefix = NULL)
   583     : generate_cc_typedecl_c(s4o_ptr) {
   745     : generate_cc_typedecl_c(s4o_ptr) {
   584       generate_cc_sfc_transitiontest = new generate_cc_sfc_transitiontest_c(s4o_ptr, scope, variable_prefix);
   746       generate_cc_sfc_transitionsort = new generate_cc_sfc_transitionsort_c(s4o_ptr, scope, variable_prefix);
   585       generate_cc_sfc_transitionresetsteps = new generate_cc_sfc_transitionresetsteps_c(s4o_ptr, scope, variable_prefix);
   747       generate_cc_sfc_transitionresetsteps = new generate_cc_sfc_transitionresetsteps_c(s4o_ptr, scope, variable_prefix);
   586       generate_cc_sfc_transitionsetsteps = new generate_cc_sfc_transitionsetsteps_c(s4o_ptr, scope, variable_prefix);
   748       generate_cc_sfc_transitionsetsteps = new generate_cc_sfc_transitionsetsteps_c(s4o_ptr, scope, variable_prefix);
   587       generate_cc_sfc_stepassociation = new generate_cc_sfc_stepassociation_c(s4o_ptr, scope, variable_prefix);
   749       generate_cc_sfc_stepassociation = new generate_cc_sfc_stepassociation_c(s4o_ptr, scope, variable_prefix);
   588       generate_cc_sfc_actionexecution = new generate_cc_sfc_actionexecution_c(s4o_ptr, scope, variable_prefix);
   750       generate_cc_sfc_actionexecution = new generate_cc_sfc_actionexecution_c(s4o_ptr, scope, variable_prefix);
   589       this->set_variable_prefix(variable_prefix);
   751       this->set_variable_prefix(variable_prefix);
   590     }
   752     }
   591   
   753   
   592     virtual ~generate_cc_sfc_c(void) {
   754     virtual ~generate_cc_sfc_c(void) {
   593       delete generate_cc_sfc_transitiontest;
   755       delete generate_cc_sfc_transitionsort;
   594       delete generate_cc_sfc_transitionresetsteps;
   756       delete generate_cc_sfc_transitionresetsteps;
   595       delete generate_cc_sfc_transitionsetsteps;
   757       delete generate_cc_sfc_transitionsetsteps;
   596       delete generate_cc_sfc_stepassociation;
   758       delete generate_cc_sfc_stepassociation;
   597       delete generate_cc_sfc_actionexecution;
   759       delete generate_cc_sfc_actionexecution;
   598     }
   760     }
   694       s4o.indent_left();
   856       s4o.indent_left();
   695       s4o.print(s4o.indent_spaces + "}\n\n");
   857       s4o.print(s4o.indent_spaces + "}\n\n");
   696       
   858       
   697       /* generate transition tests */
   859       /* generate transition tests */
   698       s4o.print(s4o.indent_spaces + "// Transitions fire test\n");
   860       s4o.print(s4o.indent_spaces + "// Transitions fire test\n");
   699       generate_cc_sfc_transitiontest->reset_transition_number();
   861       generate_cc_sfc_transitionsort->reset_transition_number();
   700       symbol->accept(*generate_cc_sfc_transitiontest);
   862       generate_cc_sfc_transitionsort->generate(symbol);
   701       s4o.print("\n");
   863       s4o.print("\n");
   702       
   864       
   703       /* generate transition reset steps */
   865       /* generate transition reset steps */
   704       s4o.print(s4o.indent_spaces + "// Transitions reset steps\n");
   866       s4o.print(s4o.indent_spaces + "// Transitions reset steps\n");
   705       generate_cc_sfc_transitionresetsteps->reset_transition_number();
   867       generate_cc_sfc_transitionresetsteps->reset_transition_number();