/* Instrument a series branch with STConstraintTester slices (as possible in * elabore sstip stipulations) * @param si entry slice of branch to be instrumented * @param constraint identifies branch that constrains the attacker */ void series_branch_insert_goal_constraint(slice_index si, slice_index constraint) { TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",constraint); TraceFunctionParamListEnd(); TraceStipulation(si); TraceStipulation(constraint); assert(SLICE_TYPE(constraint)==STProxy); { slice_index const prototype = alloc_goal_constraint_tester_slice(constraint); slice_insertion_insert(si,&prototype,1); } TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Copy a STGoalContraintTester slice to add it to the root or set play branch * @param si identifies (non-root) slice * @param st address of structure representing traversal */ void goal_constraint_tester_make_root(slice_index si, stip_structure_traversal *st) { spin_off_state_type * const state = st->param; TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParamListEnd(); stip_traverse_structure_children_pipe(si,st); if (state->spun_off[SLICE_NEXT1(si)]!=no_slice) { state->spun_off[si] = alloc_goal_constraint_tester_slice(stip_deep_copy(SLICE_NEXT2(si))); link_to_branch(state->spun_off[si],state->spun_off[SLICE_NEXT1(si)]); } TraceValue("%u\n",state->spun_off[si]); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Instrument a battle branch with STConstraint* slices (typically for a reflex * stipulation) * @param si entry slice of branch to be instrumented * @param constraint identifies branch that constrains the attacker */ void battle_branch_insert_defense_goal_constraint(slice_index si, slice_index constraint) { TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",constraint); TraceFunctionParamListEnd(); TraceStipulation(si); TraceStipulation(constraint); { slice_index const ready = branch_find_slice(STReadyForDefense, si, stip_traversal_context_intro); slice_index const prototype = alloc_goal_constraint_tester_slice(constraint); assert(ready!=no_slice); defense_branch_insert_slices(ready,&prototype,1); } TraceFunctionExit(__func__); TraceFunctionResultEnd(); }