#ifndef AMPERE #define AMPERE #include #include typedef void *engine_t; typedef void *board_t; typedef void *move_t; enum color { LIGHT = 0, DARK = 1 }; enum direction { FORWARD_LEFT = 0, FORWARD_RIGHT = 1, BACKWARD_LEFT = 2, BACKWARD_RIGHT = 3, }; struct frontend { void (*debug)(char *message); void (*report_bestmove)(move_t move); }; extern engine_t ampere_new_engine(long long int hash_size, struct frontend *frontend); extern engine_t ampere_set_debug(engine_t engine, bool debug); extern bool ampere_islegal(engine_t engine, move_t move); extern void ampere_reset_position(engine_t engine); extern void ampere_set_position(engine_t engine, board_t board); extern void ampere_play_move(engine_t engine, move_t move); extern move_t ampere_evaluate(engine_t engine, bool *cancel, int nodes, int depth, int time); extern void ampere_starteval_limited(engine_t engine, bool ponder, int nodes, int depth, int time); extern void ampere_starteval_unlimited(engine_t engine, bool ponder); extern void ampere_stopeval(engine_t engine); extern void ampere_destroy_engine(engine_t engine); extern board_t ampere_board_starting_position(); extern board_t ampere_board_new(uint32_t pieces, uint32_t color, uint32_t kings, enum color turn); extern board_t ampere_board_clone(board_t board); extern bool ampere_board_equal(board_t a, board_t b); extern uint64_t ampere_board_hash(board_t board); extern uint32_t *ampere_board_pieces(board_t board); extern uint32_t *ampere_board_colors(board_t board); extern uint32_t *ampere_board_kings(board_t board); extern enum color *ampere_board_turn(board_t board); extern bool ampere_board_has_piece_at(board_t board, int square); extern enum color ampere_board_color_at(board_t board, int square); extern bool ampere_board_king_at(board_t board, int square); extern void ampere_board_move_piece(board_t board, int start, int dest); extern void ampere_board_clear_piece(board_t board, int square); extern void ampere_board_destroy(board_t board); extern move_t ampere_move_new(int start, enum direction direction, bool jump); extern move_t ampere_move_clone(move_t move); extern bool ampere_move_equal(move_t a, move_t b); extern int ampere_move_start(move_t move); extern enum direction ampere_move_direction(move_t move); extern bool ampere_move_is_jump(move_t move); extern int ampere_move_jump_position(move_t move); extern int ampere_move_end(move_t move); extern void ampere_move_destroy(move_t move); #endif