#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