Effect *instantiate_Effect( Effect *e ) { Effect *res = NULL, *tmp, *i; Literal *tt, *l; int j; for ( i = e; i; i = i->next ) { tmp = new_Effect(); tmp->eff_p = i->eff_p;/* july06: copy over eff prob */ for ( j = 0; j < i->num_vars; j++ ) { tmp->var_types[j] = i->var_types[j]; } tmp->num_vars = i->num_vars; tmp->conditions = instantiate_wff( i->conditions ); if ( tmp->conditions->connective == FAL ) { free_partial_Effect( tmp ); continue; } for ( l = i->effects; l; l = l->next ) { tt = new_Literal(); tt->negated = l->negated; tt->fact.predicate = l->fact.predicate; for ( j = 0; j < garity[tt->fact.predicate]; j++ ) { tt->fact.args[j] = l->fact.args[j]; if ( tt->fact.args[j] < 0 && linst_table[DECODE_VAR( tt->fact.args[j] )] != -1 ) { tt->fact.args[j] = linst_table[DECODE_VAR( tt->fact.args[j] )]; } } tt->next = tmp->effects; if ( tmp->effects ) { tmp->effects->prev = tt; } tmp->effects = tt; } tmp->next = res; if ( res ) { res->prev = tmp; } res = tmp; } return res; }
Effect *instantiate_Effect( Effect *e ) { Effect *res = NULL, *tmp, *i; Literal *tt, *l; NumericEffect *ne, *ttt; int j; for ( i = e; i; i = i->next ) { tmp = new_Effect(); for ( j = 0; j < i->num_vars; j++ ) { tmp->var_types[j] = i->var_types[j]; } tmp->num_vars = i->num_vars; tmp->conditions = instantiate_wff( i->conditions ); if ( tmp->conditions->connective == FAL ) { free_partial_Effect( tmp ); continue; } for ( l = i->effects; l; l = l->next ) { tt = new_Literal(); tt->negated = l->negated; tt->fact.predicate = l->fact.predicate; for ( j = 0; j < garity[tt->fact.predicate]; j++ ) { tt->fact.args[j] = l->fact.args[j]; if ( tt->fact.args[j] < 0 && linst_table[DECODE_VAR( tt->fact.args[j] )] != -1 ) { tt->fact.args[j] = linst_table[DECODE_VAR( tt->fact.args[j] )]; } } tt->next = tmp->effects; if ( tmp->effects ) { tmp->effects->prev = tt; } tmp->effects = tt; } for ( ne = i->numeric_effects; ne; ne = ne->next ) { ttt = new_NumericEffect(); ttt->neft = ne->neft; ttt->fluent.function = ne->fluent.function; for ( j = 0; j < gf_arity[ttt->fluent.function]; j++ ) { ttt->fluent.args[j] = ne->fluent.args[j]; if ( ttt->fluent.args[j] < 0 && linst_table[DECODE_VAR( ttt->fluent.args[j] )] != -1 ) { ttt->fluent.args[j] = linst_table[DECODE_VAR( ttt->fluent.args[j] )]; } } ttt->rh = copy_Exp( ne->rh ); instantiate_exp( &(ttt->rh) ); ttt->next = tmp->numeric_effects; if ( tmp->numeric_effects ) { tmp->numeric_effects->prev = ttt; } tmp->numeric_effects = ttt; } tmp->next = res; if ( res ) { res->prev = tmp; } res = tmp; } return res; }