#ifndef FC_SOLVE__FCS_ISA_H #define FC_SOLVE__FCS_ISA_H #ifdef __cplusplus extern "C" { #endif #include "state.h" #include "fcs.h" extern void freecell_solver_state_ia_init(freecell_solver_hard_thread_t * hard_thread); #if 0 extern fcs_state_with_locations_t * fcs_state_ia_alloc(freecell_solver_instance_t * instance); #else #define fcs_state_ia_alloc_into_var(ret, instance) \ { \ if ((instance)->num_states_in_last_pack == (instance)->state_pack_len) \ { \ if (instance->num_state_packs == instance->max_num_state_packs) \ { \ instance->max_num_state_packs += IA_STATE_PACKS_GROW_BY; \ instance->state_packs = (fcs_state_with_locations_t * *)realloc(instance->state_packs, sizeof(fcs_state_with_locations_t *) * instance->max_num_state_packs); \ } \ instance->state_packs[instance->num_state_packs] = malloc(instance->state_pack_len * sizeof(fcs_state_with_locations_t)); \ instance->num_state_packs++; \ instance->num_states_in_last_pack = 0; \ } \ ret = &(instance->state_packs[instance->num_state_packs-1][instance->num_states_in_last_pack++]); \ } #endif #if 0 extern void fcs_state_ia_release(freecell_solver_instance_t * instance); #else #define fcs_state_ia_release(instance) \ { \ (instance)->num_states_in_last_pack--; \ } #endif extern void freecell_solver_state_ia_finish(freecell_solver_hard_thread_t * hard_thread); extern void freecell_solver_state_ia_foreach( freecell_solver_hard_thread_t * hard_thread, void (*ptr_function)(fcs_state_with_locations_t *, void *), void * context ); #ifdef __cplusplus } #endif #endif