blob: 02ba38bd74f0f958654024ef0798755af490d598 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <string.h>
#include <assert.h>
#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);
}
|