static void help_branch_insert_slices_impl(slice_index si, slice_index const prototypes[], unsigned int nr_prototypes, slice_index base) { stip_structure_traversal st; branch_slice_insertion_state_type state = { prototypes, nr_prototypes, slice_rank_order, nr_slice_rank_order_elmts, 0, branch_slice_rank_order_recursive, 0, si, 0 }; TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",nr_prototypes); TraceFunctionParamListEnd(); slice_insertion_init_traversal(&st,&state,stip_traversal_context_help); move_init_slice_insertion_traversal(&st); state.base_rank = get_slice_rank(SLICE_TYPE(base),&state); stip_traverse_structure(si,&st); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Insert slices into a battle branch; the elements of * prototypes are *not* deallocated by battle_branch_insert_slices_nested(). * The inserted slices are copies of the elements of prototypes). * Each slice is inserted at a position that corresponds to its predefined rank. * @param adapter identifies starting point of insertion (of type STAttackAdapter * or STDefenseAdapter) * @param prototypes contains the prototypes whose copies are inserted * @param nr_prototypes number of elements of array prototypes */ void battle_branch_insert_slices_nested(slice_index adapter, slice_index const prototypes[], unsigned int nr_prototypes) { stip_structure_traversal st; branch_slice_insertion_state_type state = { prototypes, nr_prototypes, slice_rank_order, nr_slice_rank_order_elmts, 0, branch_slice_rank_order_recursive, 0, adapter, 0 }; TraceFunctionEntry(__func__); TraceFunctionParam("%u",adapter); TraceFunctionParam("%u",nr_prototypes); TraceFunctionParamListEnd(); assert(SLICE_TYPE(adapter)==STAttackAdapter || SLICE_TYPE(adapter)==STDefenseAdapter); state.base_rank = get_slice_rank(SLICE_TYPE(adapter),&state); assert(state.base_rank!=no_slice_rank); slice_insertion_init_traversal(&st,&state,stip_traversal_context_intro); move_init_slice_insertion_traversal(&st); stip_traverse_structure_children_pipe(adapter,&st); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
static void move_generation_branch_insert_slices_impl(slice_index generating, slice_index const prototypes[], unsigned int nr_prototypes, slice_index base) { stip_structure_traversal st; branch_slice_insertion_state_type state = { prototypes,nr_prototypes, slice_rank_order, nr_slice_rank_order_elmts, 1, branch_slice_rank_order_nonrecursive, 0, generating, 0 }; TraceFunctionEntry(__func__); TraceFunctionParam("%u",generating); TraceFunctionParamListEnd(); state.base_rank = get_slice_rank(SLICE_TYPE(base),&state); assert(state.base_rank!=no_slice_rank); slice_insertion_init_traversal(&st,&state,stip_traversal_context_intro); circe_init_slice_insertion_traversal(&st); stip_traverse_structure(generating,&st); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Like attack_branch_insert_slices, but starting at a proxy slice * @param base used instead of proxy for determining the current position in the * sequence of defense branches */ void attack_branch_insert_slices_behind_proxy(slice_index proxy, slice_index const prototypes[], unsigned int nr_prototypes, slice_index base) { stip_structure_traversal st; branch_slice_insertion_state_type state = { prototypes, nr_prototypes, slice_rank_order, nr_slice_rank_order_elmts, 0, branch_slice_rank_order_recursive, 0, proxy, 0 }; TraceFunctionEntry(__func__); TraceFunctionParam("%u",proxy); TraceFunctionParam("%u",nr_prototypes); TraceFunctionParamListEnd(); assert(SLICE_TYPE(proxy)!=STAttackPlayed); state.base_rank = get_slice_rank(STAttackPlayed,&state); assert(state.base_rank!=no_slice_rank); ++state.base_rank; state.base_rank = get_slice_rank(STDefensePlayed,&state); assert(state.base_rank!=no_slice_rank); ++state.base_rank; slice_insertion_init_traversal(&st,&state,stip_traversal_context_attack); move_init_slice_insertion_traversal(&st); state.base_rank = get_slice_rank(SLICE_TYPE(base),&state); stip_traverse_structure(proxy,&st); deallocate_slice_insertion_prototypes(prototypes,nr_prototypes); TraceFunctionExit(__func__); TraceFunctionResultEnd(); }