void remove_unused_parameters( void ) { Operator *o; Bool used[MAX_VARS]; int i, i1, i2, i3; for ( i = 0; i < gnum_operators; i++ ) { o = goperators[i]; for ( i1 = 0; i1 < MAX_VARS; i1++ ) { used[i1] = FALSE; } for ( i1 = 0; i1 < o->num_preconds; i1++ ) { for ( i2 = 0; i2 < garity[o->preconds[i1].predicate]; i2++ ) { if ( o->preconds[i1].args[i2] < 0 ) { used[DECODE_VAR( o->preconds[i1].args[i2] )] = TRUE; } } } for ( i1 = 0; i1 < o->num_adds; i1++ ) { for ( i2 = 0; i2 < garity[o->adds[i1].predicate]; i2++ ) { if ( o->adds[i1].args[i2] < 0 ) { used[DECODE_VAR( o->adds[i1].args[i2])] = TRUE; } } } for ( i1 = 0; i1 < o->num_dels; i1++ ) { for ( i2 = 0; i2 < garity[o->dels[i1].predicate]; i2++ ) { if ( o->dels[i1].args[i2] < 0 ) { used[DECODE_VAR( o->dels[i1].args[i2])] = TRUE; } } } i1 = 0; i3 = 0; while ( i1 < o->num_vars ) { if ( used[i1] ) { i1++; } else { printf("\nwarning: parameter x%d of op %s is not used. skipping it.", i3, o->name); for ( i2 = i1; i2 < o->num_vars-1; i2++ ) { o->var_types[i2] = o->var_types[i2+1]; used[i2] = used[i2+1]; } decrement_var_entries( o, i1 ); o->num_vars--; } i3++; } } }
void remove_unused_easy_parameters( void ) { int i, i1, i2, i3, a; NormEffect *e; Bool used[MAX_VARS]; NormOperator *o; for ( i = 0; i < gnum_easy_operators; i++ ) { o = geasy_operators[i]; for ( i1 = 0; i1 < MAX_VARS; i1++ ) { used[i1] = FALSE; } for ( i1 = 0; i1 < o->num_preconds; i1++ ) { for ( i2 = 0; i2 < garity[o->preconds[i1].predicate]; i2++ ) { if ( o->preconds[i1].args[i2] < 0 ) { used[DECODE_VAR( o->preconds[i1].args[i2] )] = TRUE; } } } for ( e = o->effects; e; e = e->next ) { for ( i1 = 0; i1 < e->num_conditions; i1++ ) { a = garity[e->conditions[i1].predicate]; for ( i2 = 0; i2 < a; i2++ ) { if ( e->conditions[i1].args[i2] < 0 ) { used[DECODE_VAR( e->conditions[i1].args[i2])] = TRUE; } } } for ( i1 = 0; i1 < e->num_adds; i1++ ) { for ( i2 = 0; i2 < garity[e->adds[i1].predicate]; i2++ ) { if ( e->adds[i1].args[i2] < 0 ) { used[DECODE_VAR( e->adds[i1].args[i2])] = TRUE; } } } for ( i1 = 0; i1 < e->num_dels; i1++ ) { for ( i2 = 0; i2 < garity[e->dels[i1].predicate]; i2++ ) { if ( e->dels[i1].args[i2] < 0 ) { used[DECODE_VAR( e->dels[i1].args[i2])] = TRUE; } } } remove_unused_easy_effect_parameters( o, e ); } i1 = 0; i3 = 0; while ( i1 < o->num_vars ) { if ( used[i1] ) { i1++; } else { o->type_removed_vars[o->num_removed_vars] = o->var_types[i1]; for ( i2 = i1; i2 < o->num_vars-1; i2++ ) { o->var_types[i2] = o->var_types[i2+1]; used[i2] = used[i2+1]; } decrement_var_entries( o, i1 ); o->num_vars--; o->removed_vars[o->num_removed_vars++] = i3; } i3++; } } }