SWITCH-технология — автоматный подход к созданию программного обеспечения «реактивных» систем



[ << | 1 | 2 | 3 | 4 | Литература | Приложение 1 | Приложение 2 | Приложение 3 | >> ]

Приложение 1. Шабон для реализации графа переходов

#include "photon_stuff.h"
#include "dg.h"
#include "log.h"
#include "defines.h"

void A_i_( int e, dg_t *dg )
{
  int y_old = dg->y_i_ ;
  
  // Протоколирование запуска автомата
  #ifdef A_i__BEGIN_LOGGING
    log_begin( dg, "A_i_", y_old, e ) ;
  #endif

  switch( dg->y_i_ )
  {
    case 0:
      // Вызвать вложенные автоматы
      // Проверить условия на дугах и петлях, 
      // выполнить переход и действия на дуге или петле
    break ;

    ...

    case n:
      // Вызвать вложенные автоматы
      // Проверить условия на дугах и петлях, 
      // выполнить переход и действия на дуге или петле
    break ;

    default:
      #ifdef A_i__ERRORS_LOGGING
        log_write( LOG_GRAPH_ERROR, dg->number,
          "Ошибка в автомате A_i_: неизвестный номер состояния!", 0 ) ;
      #endif
  } ;
  
  // Проверка изменения текущего состояния автомата
  if( y_old == dg->y_i_ ) goto A_i__end ;  
  
  {
    // Протоколирование перехода в автомате
    #ifdef A_i__TRANS_LOGGING
      log_trans( "A_i_", y_old, dg->y_i_ ) ;
    #endif
  } ;
  
  switch( dg->y_i_ )
  {
    case 0:
      // Произвести активизацию вложенных в новое состояние автоматов
      // Выполнить действия в новом состоянии
    break ;

    ...

    case n:
      // Произвести активизацию вложенных в новое состояние автоматов
      // Выполнить действия в новом состоянии
    break ;
  } ;
  
  // Протоколирование завершения работы автомата
  A_i__end: ;
  #ifdef A_i__END_LOGGING
    log_end( dg, "A_i_", dg->y_i_, e ) ;
  #endif
} ;

[ << | 1 | 2 | 3 | 4 | Литература | Приложение 1 | Приложение 2 | Приложение 3 | >> ]