#include #include #define IPC_INTERNAL #include "ipc/state.h" void ipc_state_init(ipc_state_t *state) { // done by main.c in the loop // engine_messages_init(&state->engine_messages); uci_state_init(&state->uci_state); state->from_position = (position_t) {0}; ipc_moves_init(&state->moves); state->uci_state.moves = &state->moves; atomic_init(&state->event, EVENT_INIT); } void ipc_state_deinit(ipc_state_t *state) { engine_messages_deinit(&state->engine_messages); uci_state_deinit(&state->uci_state); ipc_moves_deinit(&state->moves); } void ipc_state_game_reset(ipc_state_t *state) { state->from_position = (position_t) {0}; state->moves.count = 0; } void ipc_state_wait_for_event(ipc_state_t *state, size_t event) { assert(event < EVENTS_COUNT); while (!ipc_state_is_event(state, event)); } bool ipc_state_is_event(ipc_state_t *state, size_t event) { assert(event < EVENTS_COUNT); return atomic_load(&state->event) == event; } void ipc_state_set_event(ipc_state_t *state, size_t event) { assert(event < EVENTS_COUNT); atomic_store(&state->event, event); }