Пример #1
0
/*
 * Domain Function:  cleanup
 */
void
sudoku_cleanup( void )
{
  Escher_ObjectSet_s eligibles_space; Escher_ObjectSet_s * eligibles = &eligibles_space; /* eligibles (ELIGIBLE) */sudoku_ELIGIBLE * eligible;Escher_ObjectSet_s cells_space; Escher_ObjectSet_s * cells = &cells_space; /* cells (CELL) */sudoku_CELL * cell;Escher_ObjectSet_s digits_space; Escher_ObjectSet_s * digits = &digits_space; /* digits (DIGIT) */sudoku_DIGIT * digit;Escher_ObjectSet_s rows_space; Escher_ObjectSet_s * rows = &rows_space; /* rows (ROW) */sudoku_ROW * row;Escher_ObjectSet_s columns_space; Escher_ObjectSet_s * columns = &columns_space; /* columns (COLUMN) */sudoku_COLUMN * column;Escher_ObjectSet_s boxes_space; Escher_ObjectSet_s * boxes = &boxes_space; /* boxes (BOX) */sudoku_BOX * box;
  Escher_InitSet( eligibles );Escher_InitSet( cells );Escher_InitSet( digits );Escher_InitSet( rows );Escher_InitSet( columns );Escher_InitSet( boxes );
  /* SELECT many eligibles FROM INSTANCES OF ELIGIBLE */
  Escher_CopySet( eligibles, &pG_sudoku_ELIGIBLE_extent.active );
  /* FOR EACH eligible IN eligibles */
  { Escher_Iterator_s iter5;
  sudoku_ELIGIBLE * sudoku_ELIGIBLEiter5;
  Escher_IteratorReset( &iter5, eligibles );
  while ( (sudoku_ELIGIBLEiter5 = (sudoku_ELIGIBLE *)Escher_IteratorNext( &iter5 )) != 0 ) {
    eligible = sudoku_ELIGIBLEiter5; {
    sudoku_CELL * cell; /* cell (CELL) */
sudoku_DIGIT * digit; /* digit (DIGIT) */

    /* SELECT one cell RELATED BY eligible->CELL[R8] */
    cell = eligible->CELL_R8;
    /* SELECT one digit RELATED BY eligible->DIGIT[R8] */
    digit = eligible->DIGIT_R8;
    /* UNRELATE cell TO digit ACROSS R8 USING eligible */
    sudoku_ELIGIBLE_R8_Unlink( cell, digit, eligible );
    /* DELETE OBJECT INSTANCE eligible */
    if ( 0 == eligible ) {
  ROX_EMPTY_HANDLE_TRACE( "ELIGIBLE", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) eligible, sudoku_DOMAIN_ID, sudoku_ELIGIBLE_CLASS_NUMBER );
    }}
}
  /* SELECT many cells FROM INSTANCES OF CELL */
  Escher_CopySet( cells, &pG_sudoku_CELL_extent.active );
  /* FOR EACH cell IN cells */
  { Escher_Iterator_s iter6;
  sudoku_CELL * sudoku_CELLiter6;
  Escher_IteratorReset( &iter6, cells );
  while ( (sudoku_CELLiter6 = (sudoku_CELL *)Escher_IteratorNext( &iter6 )) != 0 ) {
    cell = sudoku_CELLiter6; {
    sudoku_DIGIT * digit; /* digit (DIGIT) */

    /* SELECT one digit RELATED BY cell->DIGIT[R9] */
    digit = cell->DIGIT_R9;
    /* IF ( not_empty digit ) */
    if ( ( 0 != digit ) ) {
      /* UNRELATE cell FROM digit ACROSS R9 */
      sudoku_CELL_R9_Unlink( digit, cell );
    }
    }}
}
  /* SELECT many digits FROM INSTANCES OF DIGIT */
  Escher_CopySet( digits, &pG_sudoku_DIGIT_extent.active );
  /* FOR EACH digit IN digits */
  { Escher_Iterator_s iter7;
  sudoku_DIGIT * sudoku_DIGITiter7;
  Escher_IteratorReset( &iter7, digits );
  while ( (sudoku_DIGITiter7 = (sudoku_DIGIT *)Escher_IteratorNext( &iter7 )) != 0 ) {
    digit = sudoku_DIGITiter7; {
    /* DELETE OBJECT INSTANCE digit */
    if ( 0 == digit ) {
  ROX_EMPTY_HANDLE_TRACE( "DIGIT", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) digit, sudoku_DOMAIN_ID, sudoku_DIGIT_CLASS_NUMBER );
    }}
}
  /* SELECT many rows FROM INSTANCES OF ROW */
  Escher_CopySet( rows, &pG_sudoku_ROW_extent.active );
  /* FOR EACH row IN rows */
  { Escher_Iterator_s iter8;
  sudoku_ROW * sudoku_ROWiter8;
  Escher_IteratorReset( &iter8, rows );
  while ( (sudoku_ROWiter8 = (sudoku_ROW *)Escher_IteratorNext( &iter8 )) != 0 ) {
    row = sudoku_ROWiter8; {
    sudoku_SEQUENCE * sequence; /* sequence (SEQUENCE) */

    /* SELECT many cells RELATED BY row->CELL[R2] */
    Escher_ClearSet( cells );
if ( 0 != row ) {
  Escher_CopySet( cells, &row->CELL_R2 );
}
    /* FOR EACH cell IN cells */
    { Escher_Iterator_s iter11;
  sudoku_CELL * sudoku_CELLiter11;
  Escher_IteratorReset( &iter11, cells );
  while ( (sudoku_CELLiter11 = (sudoku_CELL *)Escher_IteratorNext( &iter11 )) != 0 ) {
    cell = sudoku_CELLiter11; {
      /* UNRELATE row FROM cell ACROSS R2 */
      sudoku_CELL_R2_Unlink( row, cell );
      }}
}
    /* SELECT one sequence RELATED BY row->SEQUENCE[R1] */
    sequence = row->SEQUENCE_R1;
    /* DELETE OBJECT INSTANCE sequence */
    if ( 0 == sequence ) {
  ROX_EMPTY_HANDLE_TRACE( "SEQUENCE", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) sequence, sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
    /* DELETE OBJECT INSTANCE row */
    if ( 0 == row ) {
  ROX_EMPTY_HANDLE_TRACE( "ROW", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) row, sudoku_DOMAIN_ID, sudoku_ROW_CLASS_NUMBER );
    }}
}
  /* SELECT many columns FROM INSTANCES OF COLUMN */
  Escher_CopySet( columns, &pG_sudoku_COLUMN_extent.active );
  /* FOR EACH column IN columns */
  { Escher_Iterator_s iter9;
  sudoku_COLUMN * sudoku_COLUMNiter9;
  Escher_IteratorReset( &iter9, columns );
  while ( (sudoku_COLUMNiter9 = (sudoku_COLUMN *)Escher_IteratorNext( &iter9 )) != 0 ) {
    column = sudoku_COLUMNiter9; {
    sudoku_SEQUENCE * sequence; /* sequence (SEQUENCE) */

    /* SELECT many cells RELATED BY column->CELL[R3] */
    Escher_ClearSet( cells );
if ( 0 != column ) {
  Escher_CopySet( cells, &column->CELL_R3 );
}
    /* FOR EACH cell IN cells */
    { Escher_Iterator_s iter12;
  sudoku_CELL * sudoku_CELLiter12;
  Escher_IteratorReset( &iter12, cells );
  while ( (sudoku_CELLiter12 = (sudoku_CELL *)Escher_IteratorNext( &iter12 )) != 0 ) {
    cell = sudoku_CELLiter12; {
      /* UNRELATE column FROM cell ACROSS R3 */
      sudoku_CELL_R3_Unlink( column, cell );
      }}
}
    /* SELECT one sequence RELATED BY column->SEQUENCE[R1] */
    sequence = column->SEQUENCE_R1;
    /* DELETE OBJECT INSTANCE sequence */
    if ( 0 == sequence ) {
  ROX_EMPTY_HANDLE_TRACE( "SEQUENCE", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) sequence, sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
    /* DELETE OBJECT INSTANCE column */
    if ( 0 == column ) {
  ROX_EMPTY_HANDLE_TRACE( "COLUMN", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) column, sudoku_DOMAIN_ID, sudoku_COLUMN_CLASS_NUMBER );
    }}
}
  /* SELECT many boxes FROM INSTANCES OF BOX */
  Escher_CopySet( boxes, &pG_sudoku_BOX_extent.active );
  /* FOR EACH box IN boxes */
  { Escher_Iterator_s iter10;
  sudoku_BOX * sudoku_BOXiter10;
  Escher_IteratorReset( &iter10, boxes );
  while ( (sudoku_BOXiter10 = (sudoku_BOX *)Escher_IteratorNext( &iter10 )) != 0 ) {
    box = sudoku_BOXiter10; {
    sudoku_SEQUENCE * sequence; /* sequence (SEQUENCE) */

    /* SELECT many cells RELATED BY box->CELL[R4] */
    Escher_ClearSet( cells );
if ( 0 != box ) {
  Escher_CopySet( cells, &box->CELL_R4 );
}
    /* FOR EACH cell IN cells */
    { Escher_Iterator_s iter13;
  sudoku_CELL * sudoku_CELLiter13;
  Escher_IteratorReset( &iter13, cells );
  while ( (sudoku_CELLiter13 = (sudoku_CELL *)Escher_IteratorNext( &iter13 )) != 0 ) {
    cell = sudoku_CELLiter13; {
      /* UNRELATE box FROM cell ACROSS R4 */
      sudoku_CELL_R4_Unlink( box, cell );
      /* DELETE OBJECT INSTANCE cell */
      if ( 0 == cell ) {
  ROX_EMPTY_HANDLE_TRACE( "CELL", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) cell, sudoku_DOMAIN_ID, sudoku_CELL_CLASS_NUMBER );
      }}
}
    /* SELECT one sequence RELATED BY box->SEQUENCE[R1] */
    sequence = box->SEQUENCE_R1;
    /* DELETE OBJECT INSTANCE sequence */
    if ( 0 == sequence ) {
  ROX_EMPTY_HANDLE_TRACE( "SEQUENCE", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) sequence, sudoku_DOMAIN_ID, sudoku_SEQUENCE_CLASS_NUMBER );
    /* DELETE OBJECT INSTANCE box */
    if ( 0 == box ) {
  ROX_EMPTY_HANDLE_TRACE( "BOX", "Escher_DeleteInstance" )
}
Escher_DeleteInstance( (Escher_iHandle_t) box, sudoku_DOMAIN_ID, sudoku_BOX_CLASS_NUMBER );
    }}
}
  Escher_ClearSet( eligibles );Escher_ClearSet( cells );Escher_ClearSet( digits );Escher_ClearSet( rows );Escher_ClearSet( columns );Escher_ClearSet( boxes );

}
Пример #2
0
/*
 * class operation:  update
 */
void
monitor_pulse_op_update( const i_t p_pulse )
{
  monitor_pulse * pulse=0;monitor_vitalsign * vitalsign=0;
  /* SELECT any pulse FROM INSTANCES OF pulse */
  XTUML_OAL_STMT_TRACE( 1, "SELECT any pulse FROM INSTANCES OF pulse" );
  pulse = (monitor_pulse *) Escher_SetGetAny( &pG_monitor_pulse_extent.active );
  /* SELECT one vitalsign RELATED BY pulse->vitalsign[R2] */
  XTUML_OAL_STMT_TRACE( 1, "SELECT one vitalsign RELATED BY pulse->vitalsign[R2]" );
  vitalsign = ( 0 != pulse ) ? pulse->vitalsign_R2 : 0;
  /* IF ( not_empty vitalsign ) */
  XTUML_OAL_STMT_TRACE( 1, "IF ( not_empty vitalsign )" );
  if ( ( 0 != vitalsign ) ) {
    monitor_alarm * redalarm=0;monitor_alarm * yellowalarm=0;
    /* ASSIGN vitalsign.value = PARAM.pulse */
    XTUML_OAL_STMT_TRACE( 2, "ASSIGN vitalsign.value = PARAM.pulse" );
    vitalsign->value = p_pulse;
    /* SEND UI::display(name:vitalsign.name, value:vitalsign.value) */
    XTUML_OAL_STMT_TRACE( 2, "SEND UI::display(name:vitalsign.name, value:vitalsign.value)" );
    monitor_UI_display( vitalsign->name, vitalsign->value );
    /* SELECT one redalarm RELATED BY vitalsign->alarm[R7] WHERE ( ( SELECTED.color == red ) ) */
    XTUML_OAL_STMT_TRACE( 2, "SELECT one redalarm RELATED BY vitalsign->alarm[R7] WHERE ( ( SELECTED.color == red ) )" );
    {redalarm = 0;
    {monitor_alarm * selected = ( 0 != vitalsign ) ? vitalsign->alarm_R7_sounds : 0;
    if ( ( 0 != selected ) && ( selected->color == capssys_color_red_e ) ) {
      redalarm = selected;
    }}}
    /* SELECT one yellowalarm RELATED BY vitalsign->alarm[R7] WHERE ( ( SELECTED.color == yellow ) ) */
    XTUML_OAL_STMT_TRACE( 2, "SELECT one yellowalarm RELATED BY vitalsign->alarm[R7] WHERE ( ( SELECTED.color == yellow ) )" );
    {yellowalarm = 0;
    {monitor_alarm * selected = ( 0 != vitalsign ) ? vitalsign->alarm_R7_sounds : 0;
    if ( ( 0 != selected ) && ( selected->color == capssys_color_yellow_e ) ) {
      yellowalarm = selected;
    }}}
    /* IF ( ( vitalsign.value < vitalsign.yellow_threshold ) ) */
    XTUML_OAL_STMT_TRACE( 2, "IF ( ( vitalsign.value < vitalsign.yellow_threshold ) )" );
    if ( ( vitalsign->value < vitalsign->yellow_threshold ) ) {
      /* IF ( empty redalarm ) */
      XTUML_OAL_STMT_TRACE( 3, "IF ( empty redalarm )" );
      if ( ( 0 == redalarm ) ) {
        /* IF ( not_empty yellowalarm ) */
        XTUML_OAL_STMT_TRACE( 4, "IF ( not_empty yellowalarm )" );
        if ( ( 0 != yellowalarm ) ) {
          /* UNRELATE yellowalarm FROM vitalsign ACROSS R7 */
          XTUML_OAL_STMT_TRACE( 5, "UNRELATE yellowalarm FROM vitalsign ACROSS R7" );
          monitor_alarm_R7_Unlink_sounds( vitalsign, yellowalarm );
          /* DELETE OBJECT INSTANCE yellowalarm */
          XTUML_OAL_STMT_TRACE( 5, "DELETE OBJECT INSTANCE yellowalarm" );
          if ( 0 == yellowalarm ) {
            XTUML_EMPTY_HANDLE_TRACE( "alarm", "Escher_DeleteInstance" );
          }
          Escher_DeleteInstance( (Escher_iHandle_t) yellowalarm, monitor_DOMAIN_ID, monitor_alarm_CLASS_NUMBER );
        }
        /* CREATE OBJECT INSTANCE redalarm OF alarm */
        XTUML_OAL_STMT_TRACE( 4, "CREATE OBJECT INSTANCE redalarm OF alarm" );
        redalarm = (monitor_alarm *) Escher_CreateInstance( monitor_DOMAIN_ID, monitor_alarm_CLASS_NUMBER );
        /* ASSIGN redalarm.color = red */
        XTUML_OAL_STMT_TRACE( 4, "ASSIGN redalarm.color = red" );
        redalarm->color = capssys_color_red_e;
        /* RELATE redalarm TO vitalsign ACROSS R7 */
        XTUML_OAL_STMT_TRACE( 4, "RELATE redalarm TO vitalsign ACROSS R7" );
        monitor_alarm_R7_Link_sounds( vitalsign, redalarm );
      }
    }
    else if ( ( vitalsign->value < vitalsign->yellow_threshold ) ) {
      /* IF ( empty yellowalarm ) */
      XTUML_OAL_STMT_TRACE( 3, "IF ( empty yellowalarm )" );
      if ( ( 0 == yellowalarm ) ) {
        /* CREATE OBJECT INSTANCE yellowalarm OF alarm */
        XTUML_OAL_STMT_TRACE( 4, "CREATE OBJECT INSTANCE yellowalarm OF alarm" );
        yellowalarm = (monitor_alarm *) Escher_CreateInstance( monitor_DOMAIN_ID, monitor_alarm_CLASS_NUMBER );
        /* ASSIGN yellowalarm.color = yellow */
        XTUML_OAL_STMT_TRACE( 4, "ASSIGN yellowalarm.color = yellow" );
        yellowalarm->color = capssys_color_yellow_e;
        /* RELATE yellowalarm TO vitalsign ACROSS R7 */
        XTUML_OAL_STMT_TRACE( 4, "RELATE yellowalarm TO vitalsign ACROSS R7" );
        monitor_alarm_R7_Link_sounds( vitalsign, yellowalarm );
      }
    }
    else {
    }
  }

}