#ifndef AMPERE
#define AMPERE
#include <stdint.h>
#include <stdbool.h>
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
|