- /* 
-   Copyright (c) 2011-2015 Ronald de Man 
- */ 
-   
- #ifndef TBCORE_H 
- #  define TBCORE_H 
-   
- #  ifndef _WIN32 // Pierre-Marie Baty -- fixed include guard 
- #    include <pthread.h> 
- #    define SEP_CHAR ':' 
- #    define FD int 
- #    define FD_ERR -1 
- #  else 
- #    include <windows.h> 
- #    define SEP_CHAR ';' 
- #    define FD HANDLE 
- #    define FD_ERR INVALID_HANDLE_VALUE 
- #  endif 
-   
- #  define WDLSUFFIX ".rtbw" 
- #  define DTZSUFFIX ".rtbz" 
- #  define WDLDIR "RTBWDIR" 
- #  define DTZDIR "RTBZDIR" 
- #  define TBPIECES 6 
-   
- #  define WDL_MAGIC 0x5d23e871 
- #  define DTZ_MAGIC 0xa50c66d7 
-   
- #  define TBHASHBITS 10 
-   
- typedef unsigned long long uint64; 
- typedef unsigned int uint32; 
- typedef unsigned char ubyte; 
- typedef unsigned short ushort; 
-   
- struct TBHashEntry; 
-   
- #  ifdef DECOMP64 
- typedef uint64 base_t; 
- #  else 
- typedef uint32 base_t; 
- #  endif 
-   
- struct PairsData { 
-   char *indextable; 
-   ushort *sizetable; 
-   ubyte *data; 
-   ushort *offset; 
-   ubyte *symlen; 
-   ubyte *sympat; 
-   int blocksize; 
-   int idxbits; 
-   int min_len; 
-   base_t base[1];               // C++ complains about base[]... 
- }; 
-   
- struct TBEntry { 
-   char *data; 
-   uint64 key; 
-   uint64 mapping; 
-   ubyte ready; 
-   ubyte num; 
-   ubyte symmetric; 
-   ubyte has_pawns; 
- } 
- #ifndef _WIN32 // Pierre-Marie Baty -- MSVC doesn't like that 
- __attribute__ ((__may_alias__)) 
- #endif // _WIN32 
- ; 
-   
- struct TBEntry_piece { 
-   char *data; 
-   uint64 key; 
-   uint64 mapping; 
-   ubyte ready; 
-   ubyte num; 
-   ubyte symmetric; 
-   ubyte has_pawns; 
-   ubyte enc_type; 
-   struct PairsData *precomp[2]; 
-   int factor[2][TBPIECES]; 
-   ubyte pieces[2][TBPIECES]; 
-   ubyte norm[2][TBPIECES]; 
- }; 
-   
- struct TBEntry_pawn { 
-   char *data; 
-   uint64 key; 
-   uint64 mapping; 
-   ubyte ready; 
-   ubyte num; 
-   ubyte symmetric; 
-   ubyte has_pawns; 
-   ubyte pawns[2]; 
-   struct { 
-     struct PairsData *precomp[2]; 
-     int factor[2][TBPIECES]; 
-     ubyte pieces[2][TBPIECES]; 
-     ubyte norm[2][TBPIECES]; 
-   } file[4]; 
- }; 
-   
- struct DTZEntry_piece { 
-   char *data; 
-   uint64 key; 
-   uint64 mapping; 
-   ubyte ready; 
-   ubyte num; 
-   ubyte symmetric; 
-   ubyte has_pawns; 
-   ubyte enc_type; 
-   struct PairsData *precomp; 
-   int factor[TBPIECES]; 
-   ubyte pieces[TBPIECES]; 
-   ubyte norm[TBPIECES]; 
-   ubyte flags;                  // accurate, mapped, side 
-   ushort map_idx[4]; 
-   ubyte *map; 
- }; 
-   
- struct DTZEntry_pawn { 
-   char *data; 
-   uint64 key; 
-   uint64 mapping; 
-   ubyte ready; 
-   ubyte num; 
-   ubyte symmetric; 
-   ubyte has_pawns; 
-   ubyte pawns[2]; 
-   struct { 
-     struct PairsData *precomp; 
-     int factor[TBPIECES]; 
-     ubyte pieces[TBPIECES]; 
-     ubyte norm[TBPIECES]; 
-   } file[4]; 
-   ubyte flags[4]; 
-   ushort map_idx[4][4]; 
-   ubyte *map; 
- }; 
-   
- struct TBHashEntry { 
-   uint64 key; 
-   struct TBEntry *ptr; 
- }; 
-   
- struct DTZTableEntry { 
-   uint64 key1; 
-   uint64 key2; 
-   struct TBEntry *entry; 
- }; 
-   
- #endif 
-