summaryrefslogtreecommitdiff
path: root/include/ipc/state.h
blob: 6a4455d27e0f14068e5f5169e747786b8e329b85 (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
42
#ifndef IPC_STATE_H
#define IPC_STATE_H

#include <stdatomic.h>

#include "bitboard.h"
#include "ipc/moves.h"
#include "ipc/engine_message.h"
#include "uci/state.h"

enum {
  EVENT_INIT,
  EVENT_STATE_INITIALISED,
  EVENT_UCI_STATE_INITIALISED,
  EVENT_UCI_RUNNING,
  EVENT_UCI_STOP,
  EVENT_UCI_QUIT,
  EVENT_ENGINE_GO,
  EVENT_ENGINE_RUNNING,
  EVENT_ENGINE_STOP,

  EVENTS_COUNT
};
typedef struct {
  atomic_int event;

  engine_messages_t engine_messages;
  uci_state_t uci_state;

  // reset on new game
  position_t from_position;
  ipc_moves_t moves;
} ipc_state_t;

void ipc_state_init(ipc_state_t *state);
void ipc_state_deinit(ipc_state_t *state);
void ipc_state_game_reset(ipc_state_t *state);
void ipc_state_wait_for_event(ipc_state_t *state, size_t event);
bool ipc_state_is_event(ipc_state_t *state, size_t event);
void ipc_state_set_event(ipc_state_t *state, size_t event);

#endif // IPC_STATE_H