summaryrefslogtreecommitdiff
path: root/ampere.h
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2025-12-08 19:56:48 -0500
committerMica White <botahamec@outlook.com>2025-12-08 19:56:48 -0500
commitfdb2804883deb31e3aeb15bbe588dcc9b7b76bd0 (patch)
treea4c51cd88664cab7b6673dcd3b425fb7a0202a38 /ampere.h
parent93461aa9399d981db7d8611b3eb166636de4d971 (diff)
Diffstat (limited to 'ampere.h')
-rwxr-xr-xampere.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/ampere.h b/ampere.h
new file mode 100755
index 0000000..eed0159
--- /dev/null
+++ b/ampere.h
@@ -0,0 +1,66 @@
+#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