/* * 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 ); }
/* * 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 { } } }