summaryrefslogtreecommitdiff
path: root/include/engine/ttable.h
blob: 2ee1a5cdc79ad02815d35151bcb945166a07e8cd (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
43
#ifndef TTABLE_H
#define TTABLE_H

#include "bitboard.h"

#define TABLE_BITS 24
#define TABLE_SIZE (1ULL << TABLE_BITS)
#define MASK (TABLE_SIZE - 1)
#define TT_BUCKET_SIZE 4

static struct zobrist_keys {
  u64 piece[PIECE_TYPE_COUNT][64];
  u64 castle[CASTLE_COUNT];
  u64 turn[TURN_COUNT];
  u64 en_passant[64];
} zobrist_keys;

enum { TT_EXACT, TT_LOWERBOUND, TT_UPPERBOUND };
typedef struct {
  atomic_uint_fast64_t key;
  move_t best_move;
  i16 score; // depth analysed
  i16 eval; // non-depth analysed
  u16 depth;
  u16 generation;
  u8 flag;
} tentry_t;

typedef struct {
  tentry_t entries[TT_BUCKET_SIZE];
} tbucket_t;

typedef tbucket_t* ttable_t;

void ttable_init();
u64 zobrist_hash(position_t position);
void ttable_store(
  ttable_t *ttable, u64 key, move_t move, i16 score,
  i16 eval, u16 depth, u16 generation, u8 flag
);
tentry_t *ttable_probe(ttable_t *table, u64 key);

#endif // TTABLE_H