#ifndef ENGINE_MESSAGE_H #define ENGINE_MESSAGE_H #include "ipc/moves.h" #include typedef struct engine_message { atomic_int ready; int depth; int seldepth; int multipv; int score_cp; int nodes; int nps; int hashfull; int tbhits; int time; int mate; bool node_limit; ipc_moves_t pv; ipc_move_t best_move; ipc_move_t ponder; struct engine_message *next; } engine_message_t; typedef struct { engine_message_t *oldest_valid; engine_message_t *newest_valid; int count; // mainly for debugging purposes int popped_count; int pushed_count; } engine_message_handler_t; typedef struct { engine_message_handler_t **data; int count; int capacity; } engine_messages_t; void engine_message_handler_init(engine_message_handler_t *handle); void engine_message_handler_deinit(engine_message_handler_t *handle); void engine_message_handler_acquire(engine_message_handler_t *handle); void engine_message_handler_release(engine_message_handler_t *handle); bool engine_message_handler_can_pop(engine_message_handler_t *handle); engine_message_t *engine_message_handler_pop( engine_message_handler_t *handle ); engine_message_t *engine_message_handler_push( engine_message_handler_t *handle ); void engine_messages_init(engine_messages_t *messages); void engine_messages_deinit(engine_messages_t *messages); void engine_message_init(engine_message_t *message); void engine_messages_refresh(engine_messages_t *messages); void engine_message_mark_ready(engine_message_t *message); bool engine_message_is_ready(engine_message_t *message); void engine_message_deinit(engine_message_t *message); #endif // ENGINE_MESSAGE_H