/*
* move . h - main header file for the Freecell Solver library .
*
* Written by Shlomi Fish ( shlomif @ vipe . technion . ac . il ) , 2000
*
* This file is in the public domain ( it ' s uncopyrighted ) .
*/
# ifndef FC_SOLVE__FCS_USER_H
# define FC_SOLVE__FCS_USER_H
# include "fcs_enums.h"
# include "fcs_move.h"
# ifdef __cplusplus
extern " C " {
# endif
extern void * freecell_solver_user_alloc ( void ) ;
extern int freecell_solver_user_apply_preset (
void * instance ,
const char * preset_name
) ;
extern void freecell_solver_user_limit_iterations (
void * user_instance ,
int max_iters
) ;
extern int freecell_solver_user_set_tests_order (
void * user_instance ,
const char * tests_order ,
char * * error_string
) ;
extern int freecell_solver_user_solve_board (
void * user_instance ,
const char * state_as_string
) ;
extern int freecell_solver_user_resume_solution (
void * user_instance
) ;
extern int freecell_solver_user_get_next_move (
void * user_instance ,
fcs_move_t * move
) ;
extern char * freecell_solver_user_current_state_as_string (
void * user_instance ,
int parseable_output ,
int canonized_order_output ,
int display_10_as_t
) ;
extern void freecell_solver_user_free (
void * user_instance
) ;
extern int freecell_solver_user_get_current_depth (
void * user_instance
) ;
extern void freecell_solver_user_set_solving_method (
void * user_instance ,
int method
) ;
extern int freecell_solver_user_get_num_times (
void * user_instance
) ;
extern int freecell_solver_user_get_limit_iterations (
void * user_instance
) ;
extern int freecell_solver_user_get_moves_left (
void * user_instance
) ;
extern int freecell_solver_user_set_game (
void * user_instance ,
int freecells_num ,
int stacks_num ,
int decks_num ,
int sequences_are_built_by ,
int unlimited_sequence_move ,
int empty_stacks_fill
) ;
extern void freecell_solver_user_set_solution_optimization (
void * user_instance ,
int optimize
) ;
extern char * freecell_solver_user_move_to_string (
fcs_move_t move ,
int standard_notation
) ;
extern char * freecell_solver_user_move_to_string_w_state (
void * user_instance ,
fcs_move_t move ,
int standard_notation
) ;
extern void freecell_solver_user_limit_depth (
void * user_instance ,
int max_depth
) ;
extern int freecell_solver_user_set_num_freecells (
void * user_instance ,
int freecells_num
) ;
extern int freecell_solver_user_get_max_num_freecells ( void ) ;
extern int freecell_solver_user_set_num_stacks (
void * user_instance ,
int stacks_num
) ;
extern int freecell_solver_user_get_max_num_stacks ( void ) ;
extern int freecell_solver_user_set_num_decks (
void * user_instance ,
int decks_num
) ;
extern int freecell_solver_user_get_max_num_decks ( void ) ;
extern char * freecell_solver_user_get_invalid_state_error_string (
void * user_instance ,
int print_ts
) ;
extern int freecell_solver_user_set_sequences_are_built_by_type (
void * user_instance ,
int sbb
) ;
extern int freecell_solver_user_set_empty_stacks_filled_by (
void * user_instance ,
int es_fill
) ;
extern int freecell_solver_user_set_sequence_move (
void * user_instance ,
int unlimited
) ;
extern int freecell_solver_user_set_a_star_weight (
void * user_instance ,
int index ,
double weight
) ;
typedef void ( * freecell_solver_user_iter_handler_t )
(
void * user_instance ,
int iter_num ,
int depth ,
void * ptr_state ,
int parent_iter_num ,
void * context
) ;
extern void freecell_solver_user_set_iter_handler (
void * user_instance ,
freecell_solver_user_iter_handler_t iter_handler ,
void * iter_handler_context
) ;
extern char * freecell_solver_user_iter_state_as_string (
void * user_instance ,
void * ptr_state ,
int parseable_output ,
int canonized_order_output ,
int display_10_as_t
) ;
extern void freecell_solver_user_set_random_seed (
void * user_instance ,
int seed
) ;
extern int freecell_solver_user_get_num_states_in_collection (
void * user_instance
) ;
extern void freecell_solver_user_limit_num_states_in_collection (
void * user_instance ,
int max_num_states
) ;
extern int freecell_solver_user_next_soft_thread (
void * user_instance
) ;
extern void freecell_solver_user_set_soft_thread_step (
void * user_instance ,
int num_times_step
) ;
extern int freecell_solver_user_next_hard_thread (
void * user_instance
) ;
extern int freecell_solver_user_get_num_soft_threads_in_instance (
void * user_instance
) ;
extern void freecell_solver_user_set_calc_real_depth (
void * user_instance ,
int calc_real_depth
) ;
extern void freecell_solver_user_set_soft_thread_name (
void * user_instance ,
char * name
) ;
extern int freecell_solver_user_set_hard_thread_prelude (
void * user_instance ,
char * prelude
) ;
extern void freecell_solver_user_recycle (
void * user_instance
) ;
extern int freecell_solver_user_set_optimization_scan_tests_order (
void * user_instance ,
const char * tests_order ,
char * * error_string
) ;
extern void freecell_solver_user_set_reparent_states (
void * user_instance ,
int to_reparent_states
) ;
extern void freecell_solver_user_set_scans_synergy (
void * user_instance ,
int synergy
) ;
extern void freecell_solver_user_limit_current_instance_iterations (
void * user_instance ,
int max_iters
) ;
extern int freecell_solver_user_next_instance (
void * user_instance
) ;
/*
* This function resets the user_instance , making it lose
* all the previous command line arguments it encountered
* */
extern int freecell_solver_user_reset (
void * user_instance
) ;
# ifdef __cplusplus
}
# endif
# endif /* FC_SOLVE__FCS_USER_H */