Cinnamon  1.0
chess engine
namespaces.h
Go to the documentation of this file.
00001 #ifndef NAMESPACES_H_
00002 #define NAMESPACES_H_
00003 
00004 #include <algorithm>
00005 #include <sys/stat.h>
00006 #include <sys/timeb.h>
00007 #ifdef _WIN32
00008 #include <windows.h>
00009 #include <time.h>
00010 #else
00011 #include <sys/mman.h>
00012 #endif
00013 
00014 namespace _board {
00015 using namespace std;
00016 
00017 static const string NAME ="Cinnamon 1.0";
00018 static const string STARTPOS ="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
00019 
00020 typedef unsigned char uchar;
00021 typedef long long unsigned u64;
00022 
00023 
00024 #define assert(a) if(!(a)){cout<<endl<<_time::getLocalTime()<<" ********************************** assert error IN "<<__FILE__<< " line "<<__LINE__<<" **********************************"<<endl<<flush;exit(1);};
00025 
00026 #ifdef DEBUG_MODE
00027 
00028 #define ASSERT(a) assert(a)
00029 #define INC(a) (a++)
00030 
00031 #else
00032 
00033 #define ASSERT(a)
00034 #define INC(a)
00035 
00036 #endif
00037 
00038 typedef struct {
00039     uchar promotionPiece;
00040     char pieceFrom;
00041     uchar capturedPiece;
00042     uchar from;
00043     uchar to;
00044     char side;
00045     uchar type;
00046     int score;
00047     bool used;
00048 } _Tmove;
00049 
00050 typedef struct {
00051     _Tmove* moveList;
00052     int size;
00053 } _TmoveP;
00054 
00055 static const int BLACK = 0;
00056 static const int WHITE = 1;
00057 static const int _INFINITE = 32000;
00058 #ifndef NO_FP_MODE
00059 static const int FUTIL_MARGIN =154;
00060 static const int EXT_FUTILY_MARGIN =392;
00061 static const int RAZOR_MARGIN =1071;
00062 #endif
00063 static const u64 POW2_0 =0x1ULL;
00064 static const u64 POW2_1 =0x2ULL;
00065 static const u64 POW2_2 =0x4ULL;
00066 static const u64 POW2_3 =0x8ULL;
00067 static const u64 POW2_4 =0x10ULL;
00068 static const u64 POW2_5 =0x20ULL;
00069 static const u64 POW2_6 =0x40ULL;
00070 static const u64 POW2_7 =0x80ULL;
00071 static const u64 POW2_56 =0x100000000000000ULL;
00072 static const u64 POW2_57 =0x200000000000000ULL;
00073 static const u64 POW2_58 =0x400000000000000ULL;
00074 static const u64 POW2_59 =0x800000000000000ULL;
00075 static const u64 POW2_60 =0x1000000000000000ULL;
00076 static const u64 POW2_61 =0x2000000000000000ULL;
00077 static const u64 POW2_62 =0x4000000000000000ULL;
00078 static const u64 POW2_63 =0x8000000000000000ULL;
00079 static const u64 NOTPOW2_0 =0xfffffffffffffffeULL;
00080 static const u64 NOTPOW2_1 =0xfffffffffffffffdULL;
00081 static const u64 NOTPOW2_2 =0xfffffffffffffffbULL;
00082 static const u64 NOTPOW2_3 =0xfffffffffffffff7ULL;
00083 static const u64 NOTPOW2_4 =0xffffffffffffffefULL;
00084 static const u64 NOTPOW2_5 =0xffffffffffffffdfULL;
00085 static const u64 NOTPOW2_7 =0xffffffffffffff7fULL;
00086 static const u64 NOTPOW2_56 =0xfeffffffffffffffULL;
00087 static const u64 NOTPOW2_57 =0xfdffffffffffffffULL;
00088 static const u64 NOTPOW2_58 =0xfbffffffffffffffULL;
00089 static const u64 NOTPOW2_59 =0xf7ffffffffffffffULL;
00090 static const u64 NOTPOW2_60 =0xefffffffffffffffULL;
00091 static const u64 NOTPOW2_61 =0xdfffffffffffffffULL;
00092 static const u64 NOTPOW2_63 =0x7fffffffffffffffULL;
00093 
00094 
00095 
00096 static const string BOARD[64] = {
00097     "h1", "g1", "f1", "e1", "d1", "c1", "b1", "a1",
00098     "h2", "g2", "f2", "e2", "d2", "c2", "b2", "a2",
00099     "h3", "g3", "f3", "e3", "d3", "c3", "b3", "a3",
00100     "h4", "g4", "f4", "e4", "d4", "c4", "b4", "a4",
00101     "h5", "g5", "f5", "e5", "d5", "c5", "b5", "a5",
00102     "h6", "g6", "f6", "e6", "d6", "c6", "b6", "a6",
00103     "h7", "g7", "f7", "e7", "d7", "c7", "b7", "a7",
00104     "h8", "g8", "f8", "e8", "d8", "c8", "b8", "a8"
00105 };
00106 
00107 static const char FEN_PIECE[]= {'p','P','r','R','b','B','n','N','k','K','q','Q','-'};
00108 
00109 static const int INV_FEN[]= {
00110     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00111     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00112     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00113     0xFF,0xFF,5,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,9,0xFF,0xFF,7,0xFF,1,11,3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00114     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,4,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,8,0xFF,0xFF,6,0xFF,0,10,2,0xFF,0xFF,0xFF,
00115     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00116     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00117     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00118     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00119     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00120     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
00121 };
00122 
00123 static const char ORIZ_RIGHT[]= {
00124     0,0,0,0,0,0,0,0,
00125     8,8,8,8,8,8,8,8,
00126     16,16,16,16,16,16,16,16,
00127     24,24,24,24,24,24,24,24,
00128     32,32,32,32,32,32,32,32,
00129     40,40,40,40,40,40,40,40,
00130     48,48,48,48,48,48,48,48,
00131     56,56,56,56,56,56,56,56
00132 };
00133 
00134 static const char ORIZ_LEFT[]= {
00135     7,7,7,7,7,7,7,7,
00136     15,15,15,15,15,15,15,15,
00137     23,23,23,23,23,23,23,23,
00138     31,31,31,31,31,31,31,31,
00139     39,39,39,39,39,39,39,39,
00140     47,47,47,47,47,47,47,47,
00141     55,55,55,55,55,55,55,55,
00142     63,63,63,63,63,63,63,63
00143 };
00144 
00145 static const char VERT_UPPER[]= {
00146     56,57,58,59,60,61,62,63,
00147     56,57,58,59,60,61,62,63,
00148     56,57,58,59,60,61,62,63,
00149     56,57,58,59,60,61,62,63,
00150     56,57,58,59,60,61,62,63,
00151     56,57,58,59,60,61,62,63,
00152     56,57,58,59,60,61,62,63,
00153     56,57,58,59,60,61,62,63
00154 };
00155 
00156 static const char VERT_LOWER[]= {
00157     0,1,2,3,4,5,6,7,
00158     0,1,2,3,4,5,6,7,
00159     0,1,2,3,4,5,6,7,
00160     0,1,2,3,4,5,6,7,
00161     0,1,2,3,4,5,6,7,
00162     0,1,2,3,4,5,6,7,
00163     0,1,2,3,4,5,6,7,
00164     0,1,2,3,4,5,6,7
00165 };
00166 
00167 static const u64 RANDOM_KEY[15][64]= {
00168 #include "random.inc"
00169 };
00170 
00171 static const char RIGHT_UPPER[]= {
00172     63, 55, 47, 39, 31, 23, 15, 7, 62, 63, 55, 47, 39, 31, 23, 15, 61, 62,
00173     63, 55, 47, 39, 31, 23, 60, 61, 62, 63, 55, 47, 39, 31, 59, 60, 61, 62, 63,
00174     55, 47, 39, 58, 59, 60, 61, 62, 63, 55, 47,
00175     57, 58, 59, 60, 61, 62, 63, 55, 56, 57, 58, 59, 60, 61, 62, 63
00176 };
00177 
00178 static const char RIGHT_LOWER[]= {
00179     0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 16, 8, 0, 1,
00180     2, 3, 4, 5, 24, 16, 8, 0, 1, 2, 3, 4, 32, 24, 16, 8, 0, 1, 2,
00181     3, 40, 32, 24, 16, 8, 0, 1, 2, 48, 40, 32, 24, 16, 8, 0, 1, 56,
00182     48, 40, 32, 24, 16, 8, 0
00183 };
00184 
00185 static const char LEFT_UPPER[]= {
00186     0, 8, 16, 24, 32, 40, 48, 56, 8, 16, 24, 32, 40, 48, 56, 57, 16, 24,
00187     32, 40, 48, 56, 57, 58, 24, 32, 40, 48, 56, 57, 58, 59, 32, 40, 48,
00188     56, 57, 58, 59, 60, 40, 48, 56, 57, 58, 59, 60, 61, 48, 56, 57, 58,
00189     59, 60, 61, 62, 56, 57, 58, 59, 60, 61, 62, 63
00190 };
00191 
00192 static const char LEFT_LOWER[]= {
00193     0, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 15, 2, 3, 4, 5,
00194     6, 7, 15, 23, 3, 4, 5, 6, 7, 15, 23, 31, 4, 5, 6, 7, 15, 23, 31,
00195     39, 5, 6, 7, 15, 23, 31, 39, 47, 6, 7, 15, 23, 31, 39, 47, 55, 7,
00196     15, 23, 31, 39, 47, 55, 63
00197 };
00198 
00199 
00200 static const u64 RANK_FILE[64] = {
00201     0x1010101010101feULL, 0x2020202020202fdULL,
00202     0x4040404040404fbULL, 0x8080808080808f7ULL, 0x10101010101010efULL,
00203     0x20202020202020dfULL, 0x40404040404040bfULL, 0x808080808080807fULL,
00204     0x10101010101fe01ULL, 0x20202020202fd02ULL, 0x40404040404fb04ULL,
00205     0x80808080808f708ULL, 0x101010101010ef10ULL, 0x202020202020df20ULL,
00206     0x404040404040bf40ULL, 0x8080808080807f80ULL, 0x101010101fe0101ULL,
00207     0x202020202fd0202ULL, 0x404040404fb0404ULL, 0x808080808f70808ULL,
00208     0x1010101010ef1010ULL, 0x2020202020df2020ULL, 0x4040404040bf4040ULL,
00209     0x80808080807f8080ULL, 0x1010101fe010101ULL, 0x2020202fd020202ULL,
00210     0x4040404fb040404ULL, 0x8080808f7080808ULL, 0x10101010ef101010ULL,
00211     0x20202020df202020ULL, 0x40404040bf404040ULL, 0x808080807f808080ULL,
00212     0x10101fe01010101ULL, 0x20202fd02020202ULL, 0x40404fb04040404ULL,
00213     0x80808f708080808ULL, 0x101010ef10101010ULL, 0x202020df20202020ULL,
00214     0x404040bf40404040ULL, 0x8080807f80808080ULL, 0x101fe0101010101ULL,
00215     0x202fd0202020202ULL, 0x404fb0404040404ULL, 0x808f70808080808ULL,
00216     0x1010ef1010101010ULL, 0x2020df2020202020ULL, 0x4040bf4040404040ULL,
00217     0x80807f8080808080ULL, 0x1fe010101010101ULL, 0x2fd020202020202ULL,
00218     0x4fb040404040404ULL, 0x8f7080808080808ULL, 0x10ef101010101010ULL,
00219     0x20df202020202020ULL, 0x40bf404040404040ULL, 0x807f808080808080ULL,
00220     0xfe01010101010101ULL, 0xfd02020202020202ULL, 0xfb04040404040404ULL,
00221     0xf708080808080808ULL, 0xef10101010101010ULL, 0xdf20202020202020ULL,
00222     0xbf40404040404040ULL, 0x7f80808080808080ULL
00223 };
00224 
00225 static const u64 RANK_BOUND[64] = {
00226     0x2ULL, 0x5ULL, 0xaULL, 0x14ULL, 0x28ULL,
00227     0x50ULL, 0xa0ULL, 0x40ULL, 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL,
00228     0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL,
00229     0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL,
00230     0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL,
00231     0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL,
00232     0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL,
00233     0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL,
00234     0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL,
00235     0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL,
00236     0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL,
00237     0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL,
00238     0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL,
00239     0x40000000000000ULL, 0x200000000000000ULL, 0x500000000000000ULL,
00240     0xa00000000000000ULL, 0x1400000000000000ULL, 0x2800000000000000ULL,
00241     0x5000000000000000ULL, 0xa000000000000000ULL, 0x4000000000000000ULL
00242 };
00243 
00244 static const u64 RANK[64] = {
00245     0xffULL, 0xffULL, 0xffULL, 0xffULL, 0xffULL,
00246     0xffULL, 0xffULL, 0xffULL, 0xff00ULL, 0xff00ULL, 0xff00ULL,
00247     0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff0000ULL,
00248     0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL,
00249     0xff0000ULL, 0xff0000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL,
00250     0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL,
00251     0xff000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL,
00252     0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL,
00253     0xff00000000ULL, 0xff0000000000ULL, 0xff0000000000ULL,
00254     0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL,
00255     0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 0xff000000000000ULL,
00256     0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL,
00257     0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL,
00258     0xff000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL,
00259     0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL,
00260     0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL
00261 };
00262 
00263 static const u64 RIGHT_DIAG[64] = {
00264     0x8040201008040200ULL, 0x80402010080400ULL,
00265     0x804020100800ULL, 0x8040201000ULL, 0x80402000ULL, 0x804000ULL,
00266     0x8000ULL, 0x0ULL, 0x4020100804020000ULL, 0x8040201008040001ULL,
00267     0x80402010080002ULL, 0x804020100004ULL, 0x8040200008ULL, 0x80400010ULL,
00268     0x800020ULL, 0x40ULL, 0x2010080402000000ULL, 0x4020100804000100ULL,
00269     0x8040201008000201ULL, 0x80402010000402ULL, 0x804020000804ULL,
00270     0x8040001008ULL, 0x80002010ULL, 0x4020ULL, 0x1008040200000000ULL,
00271     0x2010080400010000ULL, 0x4020100800020100ULL, 0x8040201000040201ULL,
00272     0x80402000080402ULL, 0x804000100804ULL, 0x8000201008ULL, 0x402010ULL,
00273     0x804020000000000ULL, 0x1008040001000000ULL, 0x2010080002010000ULL,
00274     0x4020100004020100ULL, 0x8040200008040201ULL, 0x80400010080402ULL,
00275     0x800020100804ULL, 0x40201008ULL, 0x402000000000000ULL,
00276     0x804000100000000ULL, 0x1008000201000000ULL, 0x2010000402010000ULL,
00277     0x4020000804020100ULL, 0x8040001008040201ULL, 0x80002010080402ULL,
00278     0x4020100804ULL, 0x200000000000000ULL, 0x400010000000000ULL,
00279     0x800020100000000ULL, 0x1000040201000000ULL, 0x2000080402010000ULL,
00280     0x4000100804020100ULL, 0x8000201008040201ULL, 0x402010080402ULL,
00281     0x0ULL, 0x1000000000000ULL, 0x2010000000000ULL, 0x4020100000000ULL,
00282     0x8040201000000ULL, 0x10080402010000ULL, 0x20100804020100ULL,
00283     0x40201008040201ULL
00284 };
00285 
00286 static const u64 LEFT_DIAG[64] = {
00287     0x0ULL, 0x100ULL, 0x10200ULL, 0x1020400ULL,
00288     0x102040800ULL, 0x10204081000ULL, 0x1020408102000ULL,
00289     0x102040810204000ULL, 0x2ULL, 0x10004ULL, 0x1020008ULL, 0x102040010ULL,
00290     0x10204080020ULL, 0x1020408100040ULL, 0x102040810200080ULL,
00291     0x204081020400000ULL, 0x204ULL, 0x1000408ULL, 0x102000810ULL,
00292     0x10204001020ULL, 0x1020408002040ULL, 0x102040810004080ULL,
00293     0x204081020008000ULL, 0x408102040000000ULL, 0x20408ULL, 0x100040810ULL,
00294     0x10200081020ULL, 0x1020400102040ULL, 0x102040800204080ULL,
00295     0x204081000408000ULL, 0x408102000800000ULL, 0x810204000000000ULL,
00296     0x2040810ULL, 0x10004081020ULL, 0x1020008102040ULL,
00297     0x102040010204080ULL, 0x204080020408000ULL, 0x408100040800000ULL,
00298     0x810200080000000ULL, 0x1020400000000000ULL, 0x204081020ULL,
00299     0x1000408102040ULL, 0x102000810204080ULL, 0x204001020408000ULL,
00300     0x408002040800000ULL, 0x810004080000000ULL, 0x1020008000000000ULL,
00301     0x2040000000000000ULL, 0x20408102040ULL, 0x100040810204080ULL,
00302     0x200081020408000ULL, 0x400102040800000ULL, 0x800204080000000ULL,
00303     0x1000408000000000ULL, 0x2000800000000000ULL, 0x4000000000000000ULL,
00304     0x2040810204080ULL, 0x4081020408000ULL, 0x8102040800000ULL,
00305     0x10204080000000ULL, 0x20408000000000ULL, 0x40800000000000ULL,
00306     0x80000000000000ULL, 0x0ULL
00307 };
00308 
00309 static const u64 LEFT_RIGHT_DIAG[64] = {
00310     0x8040201008040200ULL,0x80402010080500ULL,0x804020110a00ULL,0x8041221400ULL,0x182442800ULL,
00311     0x10204885000ULL,0x102040810a000ULL,0x102040810204000ULL,0x4020100804020002ULL,0x8040201008050005ULL,0x804020110a000aULL,
00312     0x804122140014ULL,0x18244280028ULL,0x1020488500050ULL,0x102040810a000a0ULL,0x204081020400040ULL,0x2010080402000204ULL,
00313     0x4020100805000508ULL,0x804020110a000a11ULL,0x80412214001422ULL,0x1824428002844ULL,0x102048850005088ULL,0x2040810a000a010ULL,
00314     0x408102040004020ULL,0x1008040200020408ULL,0x2010080500050810ULL,0x4020110a000a1120ULL,0x8041221400142241ULL,0x182442800284482ULL,0x204885000508804ULL,
00315     0x40810a000a01008ULL,0x810204000402010ULL,0x804020002040810ULL,0x1008050005081020ULL,0x20110a000a112040ULL,0x4122140014224180ULL,0x8244280028448201ULL,
00316     0x488500050880402ULL,0x810a000a0100804ULL,0x1020400040201008ULL,0x402000204081020ULL,0x805000508102040ULL,0x110a000a11204080ULL,
00317     0x2214001422418000ULL,0x4428002844820100ULL,0x8850005088040201ULL,0x10a000a010080402ULL,0x2040004020100804ULL,0x200020408102040ULL,
00318     0x500050810204080ULL,0xa000a1120408000ULL,0x1400142241800000ULL,0x2800284482010000ULL,0x5000508804020100ULL,0xa000a01008040201ULL,
00319     0x4000402010080402ULL,0x2040810204080ULL,0x5081020408000ULL,0xa112040800000ULL,0x14224180000000ULL,0x28448201000000ULL,0x50880402010000ULL,
00320     0xa0100804020100ULL,0x40201008040201ULL
00321 };
00322 
00323 static const u64 LEFT_RIGHT_RANK_FILE[64] = {
00324     0x81412111090503feULL,0x2824222120a07fdULL,0x404844424150efbULL,0x8080888492a1cf7ULL,0x10101011925438efULL,0x2020212224a870dfULL,0x404142444850e0bfULL,0x8182848890a0c07fULL,
00325     0x412111090503fe03ULL,0x824222120a07fd07ULL,0x4844424150efb0eULL,0x80888492a1cf71cULL,0x101011925438ef38ULL,0x20212224a870df70ULL,0x4142444850e0bfe0ULL,0x82848890a0c07fc0ULL,
00326     0x2111090503fe0305ULL,0x4222120a07fd070aULL,0x844424150efb0e15ULL,0x888492a1cf71c2aULL,0x1011925438ef3854ULL,0x212224a870df70a8ULL,0x42444850e0bfe050ULL,0x848890a0c07fc0a0ULL,
00327     0x11090503fe030509ULL,0x22120a07fd070a12ULL,0x4424150efb0e1524ULL,0x88492a1cf71c2a49ULL,0x11925438ef385492ULL,0x2224a870df70a824ULL,0x444850e0bfe05048ULL,0x8890a0c07fc0a090ULL,
00328     0x90503fe03050911ULL,0x120a07fd070a1222ULL,0x24150efb0e152444ULL,0x492a1cf71c2a4988ULL,0x925438ef38549211ULL,0x24a870df70a82422ULL,0x4850e0bfe0504844ULL,0x90a0c07fc0a09088ULL,
00329     0x503fe0305091121ULL,0xa07fd070a122242ULL,0x150efb0e15244484ULL,0x2a1cf71c2a498808ULL,0x5438ef3854921110ULL,0xa870df70a8242221ULL,0x50e0bfe050484442ULL,0xa0c07fc0a0908884ULL,
00330     0x3fe030509112141ULL,0x7fd070a12224282ULL,0xefb0e1524448404ULL,0x1cf71c2a49880808ULL,0x38ef385492111010ULL,0x70df70a824222120ULL,0xe0bfe05048444241ULL,0xc07fc0a090888482ULL,
00331     0xfe03050911214181ULL,0xfd070a1222428202ULL,0xfb0e152444840404ULL,0xf71c2a4988080808ULL,0xef38549211101010ULL,0xdf70a82422212020ULL,0xbfe0504844424140ULL,0x7fc0a09088848281ULL
00332 };
00333 
00334 static const char FILE_AT[64] = {
00335     0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
00336     0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4,
00337     5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7
00338 };
00339 
00340 static const char RANK_AT[64] = {
00341     0,0,0,0,0,0,0,0,
00342     1,1,1,1,1,1,1,1,
00343     2,2,2,2,2,2,2,2,
00344     3,3,3,3,3,3,3,3,
00345     4,4,4,4,4,4,4,4,
00346     5,5,5,5,5,5,5,5,
00347     6,6,6,6,6,6,6,6,
00348     7,7,7,7,7,7,7,7
00349 };
00350 
00351 static const u64 PAWNS_7_2[2] = { 0xFF000000000000ULL, 0xFF00ULL };
00352 
00353 static const u64 FILE_[64] = {
00354     0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00355     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00356     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00357     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00358     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00359     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00360     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00361     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00362     0x4040404040404040ULL,0x8080808080808080ULL
00363 };
00364 
00365 
00366 static const u64 POW2[64] = {
00367     0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x100ULL,0x200ULL,0x400ULL,0x800ULL,0x1000ULL,0x2000ULL,0x4000ULL,0x8000ULL,0x10000ULL,0x20000ULL,
00368     0x40000ULL,0x80000ULL,0x100000ULL,0x200000ULL,0x400000ULL,0x800000ULL,0x1000000ULL,0x2000000ULL,0x4000000ULL,0x8000000ULL,0x10000000ULL,0x20000000ULL,0x40000000ULL,0x80000000ULL,
00369     0x100000000ULL,0x200000000ULL,0x400000000ULL,0x800000000ULL,0x1000000000ULL,0x2000000000ULL,0x4000000000ULL,0x8000000000ULL,0x10000000000ULL,0x20000000000ULL,0x40000000000ULL,
00370     0x80000000000ULL,0x100000000000ULL,0x200000000000ULL,0x400000000000ULL,0x800000000000ULL,0x1000000000000ULL,0x2000000000000ULL,0x4000000000000ULL,0x8000000000000ULL,0x10000000000000ULL,
00371     0x20000000000000ULL,0x40000000000000ULL,0x80000000000000ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,
00372     0x4000000000000000ULL,0x8000000000000000ULL
00373 };
00374 
00375 static const u64 NOTPOW2[64] = {
00376     0xfffffffffffffffeULL,0xfffffffffffffffdULL,0xfffffffffffffffbULL,0xfffffffffffffff7ULL,0xffffffffffffffefULL,0xffffffffffffffdfULL,0xffffffffffffffbfULL,
00377     0xffffffffffffff7fULL,0xfffffffffffffeffULL,0xfffffffffffffdffULL,0xfffffffffffffbffULL,0xfffffffffffff7ffULL,0xffffffffffffefffULL,0xffffffffffffdfffULL,0xffffffffffffbfffULL,
00378     0xffffffffffff7fffULL,0xfffffffffffeffffULL,0xfffffffffffdffffULL,0xfffffffffffbffffULL,0xfffffffffff7ffffULL,0xffffffffffefffffULL,0xffffffffffdfffffULL,0xffffffffffbfffffULL,
00379     0xffffffffff7fffffULL,0xfffffffffeffffffULL,0xfffffffffdffffffULL,0xfffffffffbffffffULL,0xfffffffff7ffffffULL,0xffffffffefffffffULL,0xffffffffdfffffffULL,0xffffffffbfffffffULL,
00380     0xffffffff7fffffffULL,0xfffffffeffffffffULL,0xfffffffdffffffffULL,0xfffffffbffffffffULL,0xfffffff7ffffffffULL,0xffffffefffffffffULL,0xffffffdfffffffffULL,0xffffffbfffffffffULL,
00381     0xffffff7fffffffffULL,0xfffffeffffffffffULL,0xfffffdffffffffffULL,0xfffffbffffffffffULL,0xfffff7ffffffffffULL,0xffffefffffffffffULL,0xffffdfffffffffffULL,0xffffbfffffffffffULL,
00382     0xffff7fffffffffffULL,0xfffeffffffffffffULL,0xfffdffffffffffffULL,0xfffbffffffffffffULL,0xfff7ffffffffffffULL,0xffefffffffffffffULL,0xffdfffffffffffffULL,0xffbfffffffffffffULL,
00383     0xff7fffffffffffffULL,0xfeffffffffffffffULL,0xfdffffffffffffffULL,0xfbffffffffffffffULL,0xf7ffffffffffffffULL,0xefffffffffffffffULL,0xdfffffffffffffffULL,0xbfffffffffffffffULL,
00384     0x7fffffffffffffffULL
00385 };
00386 
00387 static const u64 PAWN_CAPTURE_MASK[2][64] = { {
00388         0x0000000000000000ULL,
00389         0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL,
00390         0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL,
00391         0x0000000000000000ULL, 0x0000000000000002ULL, 0x0000000000000005ULL,
00392         0x000000000000000AULL, 0x0000000000000014ULL, 0x0000000000000028ULL,
00393         0x0000000000000050ULL, 0x00000000000000A0ULL, 0x0000000000000040ULL,
00394         0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL,
00395         0x0000000000001400ULL, 0x0000000000002800ULL, 0x0000000000005000ULL,
00396         0x000000000000A000ULL, 0x0000000000004000ULL, 0x0000000000020000ULL,
00397         0x0000000000050000ULL, 0x00000000000A0000ULL, 0x0000000000140000ULL,
00398         0x0000000000280000ULL, 0x0000000000500000ULL, 0x0000000000A00000ULL,
00399         0x0000000000400000ULL, 0x0000000002000000ULL, 0x0000000005000000ULL,
00400         0x000000000A000000ULL, 0x0000000014000000ULL, 0x0000000028000000ULL,
00401         0x0000000050000000ULL, 0x00000000A0000000ULL, 0x0000000040000000ULL,
00402         0x0000000200000000ULL, 0x0000000500000000ULL, 0x0000000A00000000ULL,
00403         0x0000001400000000ULL, 0x0000002800000000ULL, 0x0000005000000000ULL,
00404         0x000000A000000000ULL, 0x0000004000000000ULL, 0x0000020000000000ULL,
00405         0x0000050000000000ULL, 0x00000A0000000000ULL, 0x0000140000000000ULL,
00406         0x0000280000000000ULL, 0x0000500000000000ULL, 0x0000A00000000000ULL,
00407         0x0000400000000000ULL, 0x0002000000000000ULL, 0x0005000000000000ULL,
00408         0x000A000000000000ULL, 0x0014000000000000ULL, 0x0028000000000000ULL,
00409         0x0050000000000000ULL, 0x00A0000000000000ULL, 0x0040000000000000ULL
00410     },
00411     {
00412         0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL,
00413         0x0000000000001400ULL, 0x0000000000002800ULL,
00414         0x0000000000005000ULL, 0x000000000000A000ULL,
00415         0x0000000000004000ULL, 0x0000000000020000ULL,
00416         0x0000000000050000ULL, 0x00000000000A0000ULL,
00417         0x0000000000140000ULL, 0x0000000000280000ULL,
00418         0x0000000000500000ULL, 0x0000000000A00000ULL,
00419         0x0000000000400000ULL, 0x0000000002000000ULL,
00420         0x0000000005000000ULL, 0x000000000A000000ULL,
00421         0x0000000014000000ULL, 0x0000000028000000ULL,
00422         0x0000000050000000ULL, 0x00000000A0000000ULL,
00423         0x0000000040000000ULL, 0x0000000200000000ULL,
00424         0x0000000500000000ULL, 0x0000000A00000000ULL,
00425         0x0000001400000000ULL, 0x0000002800000000ULL,
00426         0x0000005000000000ULL, 0x000000A000000000ULL,
00427         0x0000004000000000ULL, 0x0000020000000000ULL,
00428         0x0000050000000000ULL, 0x00000A0000000000ULL,
00429         0x0000140000000000ULL, 0x0000280000000000ULL,
00430         0x0000500000000000ULL, 0x0000A00000000000ULL,
00431         0x0000400000000000ULL, 0x0002000000000000ULL,
00432         0x0005000000000000ULL, 0x000A000000000000ULL,
00433         0x0014000000000000ULL, 0x0028000000000000ULL,
00434         0x0050000000000000ULL, 0x00A0000000000000ULL,
00435         0x0040000000000000ULL, 0x0200000000000000ULL,
00436         0x0500000000000000ULL, 0x0A00000000000000ULL,
00437         0x1400000000000000ULL, 0x2800000000000000ULL,
00438         0x5000000000000000ULL, 0xA000000000000000ULL,
00439         0x4000000000000000ULL, 0x0000000000000000ULL,
00440         0x0000000000000000ULL, 0x0000000000000000ULL,
00441         0x0000000000000000ULL, 0x0000000000000000ULL,
00442         0x0000000000000000ULL, 0x0000000000000000ULL,
00443         0x0000000000000000ULL
00444     }
00445 };
00446 
00447 static const u64 NEAR_MASK1[64] = {
00448     0x0000000000000302ULL, 0x0000000000000705ULL,
00449     0x0000000000000E0AULL, 0x0000000000001C14ULL, 0x0000000000003828ULL,
00450     0x0000000000007050ULL, 0x000000000000E0A0ULL, 0x000000000000C040ULL,
00451     0x0000000000030203ULL, 0x0000000000070507ULL, 0x00000000000E0A0EULL,
00452     0x00000000001C141CULL, 0x0000000000382838ULL, 0x0000000000705070ULL,
00453     0x0000000000E0A0E0ULL, 0x0000000000C040C0ULL, 0x0000000003020300ULL,
00454     0x0000000007050700ULL, 0x000000000E0A0E00ULL, 0x000000001C141C00ULL,
00455     0x0000000038283800ULL, 0x0000000070507000ULL, 0x00000000E0A0E000ULL,
00456     0x00000000C040C000ULL, 0x0000000302030000ULL, 0x0000000705070000ULL,
00457     0x0000000E0A0E0000ULL, 0x0000001C141C0000ULL, 0x0000003828380000ULL,
00458     0x0000007050700000ULL, 0x000000E0A0E00000ULL, 0x000000C040C00000ULL,
00459     0x0000030203000000ULL, 0x0000070507000000ULL, 0x00000E0A0E000000ULL,
00460     0x00001C141C000000ULL, 0x0000382838000000ULL, 0x0000705070000000ULL,
00461     0x0000E0A0E0000000ULL, 0x0000C040C0000000ULL, 0x0003020300000000ULL,
00462     0x0007050700000000ULL, 0x000E0A0E00000000ULL, 0x001C141C00000000ULL,
00463     0x0038283800000000ULL, 0x0070507000000000ULL, 0x00E0A0E000000000ULL,
00464     0x00C040C000000000ULL, 0x0302030000000000ULL, 0x0705070000000000ULL,
00465     0x0E0A0E0000000000ULL, 0x1C141C0000000000ULL, 0x3828380000000000ULL,
00466     0x7050700000000000ULL, 0xE0A0E00000000000ULL, 0xC040C00000000000ULL,
00467     0x0203000000000000ULL, 0x0507000000000000ULL, 0x0A0E000000000000ULL,
00468     0x141C000000000000ULL, 0x2838000000000000ULL, 0x5070000000000000ULL,
00469     0xA0E0000000000000ULL, 0x40C0000000000000ULL
00470 };
00471 
00472 static const u64 NEAR_MASK2[64] = {
00473     0x70706ULL,0xf0f0dULL,0x1f1f1bULL,0x3e3e36ULL,0x7c7c6cULL,0xf8f8d8ULL,0xf0f0b0ULL,0xe0e060ULL,0x7070607ULL,0xf0f0d0fULL,0x1f1f1b1fULL,0x3e3e363eULL,0x7c7c6c7cULL,0xf8f8d8f8ULL,
00474     0xf0f0b0f0ULL,0xe0e060e0ULL,0x707060707ULL,0xf0f0d0f0fULL,0x1f1f1b1f1fULL,0x3e3e363e3eULL,0x7c7c6c7c7cULL,0xf8f8d8f8f8ULL,0xf0f0b0f0f0ULL,0xe0e060e0e0ULL,0x70706070700ULL,
00475     0xf0f0d0f0f00ULL,0x1f1f1b1f1f00ULL,0x3e3e363e3e00ULL,0x7c7c6c7c7c00ULL,0xf8f8d8f8f800ULL,0xf0f0b0f0f000ULL,0xe0e060e0e000ULL,0x7070607070000ULL,0xf0f0d0f0f0000ULL,0x1f1f1b1f1f0000ULL,
00476     0x3e3e363e3e0000ULL,0x7c7c6c7c7c0000ULL,0xf8f8d8f8f80000ULL,0xf0f0b0f0f00000ULL,0xe0e060e0e00000ULL,0x707060707000000ULL,0xf0f0d0f0f000000ULL,0x1f1f1b1f1f000000ULL,
00477     0x3e3e363e3e000000ULL,0x7c7c6c7c7c000000ULL,0xf8f8d8f8f8000000ULL,0xf0f0b0f0f0000000ULL,0xe0e060e0e0000000ULL,0x706070700000000ULL,0xf0d0f0f00000000ULL,0x1f1b1f1f00000000ULL,
00478     0x3e363e3e00000000ULL,0x7c6c7c7c00000000ULL,0xf8d8f8f800000000ULL,0xf0b0f0f000000000ULL,0xe060e0e000000000ULL,0x607070000000000ULL,0xd0f0f0000000000ULL,0x1b1f1f0000000000ULL,
00479     0x363e3e0000000000ULL,0x6c7c7c0000000000ULL,0xd8f8f80000000000ULL,0xb0f0f00000000000ULL,0x60e0e00000000000ULL
00480 };
00481 
00482 static const u64 KNIGHT_MASK[64] = {
00483     0x0000000000020400ULL, 0x0000000000050800ULL,
00484     0x00000000000A1100ULL, 0x0000000000142200ULL, 0x0000000000284400ULL,
00485     0x0000000000508800ULL, 0x0000000000A01000ULL, 0x0000000000402000ULL,
00486     0x0000000002040004ULL, 0x0000000005080008ULL, 0x000000000A110011ULL,
00487     0x0000000014220022ULL, 0x0000000028440044ULL, 0x0000000050880088ULL,
00488     0x00000000A0100010ULL, 0x0000000040200020ULL, 0x0000000204000402ULL,
00489     0x0000000508000805ULL, 0x0000000A1100110AULL, 0x0000001422002214ULL,
00490     0x0000002844004428ULL, 0x0000005088008850ULL, 0x000000A0100010A0ULL,
00491     0x0000004020002040ULL, 0x0000020400040200ULL, 0x0000050800080500ULL,
00492     0x00000A1100110A00ULL, 0x0000142200221400ULL, 0x0000284400442800ULL,
00493     0x0000508800885000ULL, 0x0000A0100010A000ULL, 0x0000402000204000ULL,
00494     0x0002040004020000ULL, 0x0005080008050000ULL, 0x000A1100110A0000ULL,
00495     0x0014220022140000ULL, 0x0028440044280000ULL, 0x0050880088500000ULL,
00496     0x00A0100010A00000ULL, 0x0040200020400000ULL, 0x0204000402000000ULL,
00497     0x0508000805000000ULL, 0x0A1100110A000000ULL, 0x1422002214000000ULL,
00498     0x2844004428000000ULL, 0x5088008850000000ULL, 0xA0100010A0000000ULL,
00499     0x4020002040000000ULL, 0x0400040200000000ULL, 0x0800080500000000ULL,
00500     0x1100110A00000000ULL, 0x2200221400000000ULL, 0x4400442800000000ULL,
00501     0x8800885000000000ULL, 0x100010A000000000ULL, 0x2000204000000000ULL,
00502     0x0004020000000000ULL, 0x0008050000000000ULL, 0x00110A0000000000ULL,
00503     0x0022140000000000ULL, 0x0044280000000000ULL, 0x0088500000000000ULL,
00504     0x0010A00000000000ULL, 0x0020400000000000ULL
00505 };
00506 
00507 static const u64 ENPASSANT_MASK[2][64] = { {
00508         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00509         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00510         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00511         0ULL, 0ULL, 0x200000000ULL, 0x500000000ULL, 0xA00000000ULL,
00512         0x1400000000ULL, 0x2800000000ULL, 0x5000000000ULL, 0xA000000000ULL,
00513         0x4000000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00514         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00515         0ULL, 0ULL, 0
00516     }, {
00517         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00518         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00519         0ULL, 0ULL, 0ULL, 0ULL, 0x2000000ULL, 0x5000000ULL, 0xA000000ULL,
00520         0x14000000ULL, 0x28000000ULL, 0x50000000ULL, 0xA0000000ULL,
00521         0x40000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00522         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00523         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00524     }
00525 };
00526 
00527 }
00528 
00529 using namespace _board;
00530 
00531 namespace _memory {
00532 void* _mmap(string fileName);
00533 void _munmap(void *blob,int fileSize);
00534 }
00535 
00536 namespace _time {
00537 string getLocalTime();
00538 int diffTime(struct timeb a,struct timeb b);
00539 }
00540 
00541 namespace _string {
00542 void trimRight( string& str  );
00543 void replace(string& f,string s1,string s2);
00544 void replace(string& f,char c1,char c2) ;
00545 }
00546 
00547 namespace _file {
00548 int fileSize(const string& FileName) ;
00549 }
00550 
00551 namespace _bits {
00552 extern u64** LINK_ROOKS;
00553 void init();
00554 void _free();
00555 
00556 #if UINTPTR_MAX == 0xffffffffffffffff
00557 __inline static int BITScanForward(u64 bits) {
00558     return __builtin_ffsll(bits) - 1;
00559 }
00560 #else
00561 __inline static int BITScanForward(u64 bits) {
00562     return ((unsigned) bits) ? __builtin_ffs(bits) - 1 : __builtin_ffs(bits >> 32) + 31;
00563 }
00564 #endif
00565 
00566 __inline static int bitCount(u64 bits) {
00567     int count = 0;
00568     while (bits) {
00569         count++;
00570         bits &= bits - 1;
00571     }
00572     return count;
00573 }
00574 
00575 }
00576 
00577 
00578 namespace _eval {
00579 
00580 static const int VALUEPAWN =100;
00581 static const int VALUEROOK= 520;
00582 static const int VALUEBISHOP= 335;
00583 static const int VALUEKNIGHT =330;
00584 static const int VALUEQUEEN =980;
00585 static const int VALUEKING =_INFINITE;
00586 
00587 static const int PIECES_VALUE[] = {
00588     VALUEPAWN, VALUEPAWN, VALUEROOK, VALUEROOK,
00589     VALUEBISHOP, VALUEBISHOP, VALUEKNIGHT, VALUEKNIGHT, VALUEKING,
00590     VALUEKING, VALUEQUEEN, VALUEQUEEN, 0
00591 };
00592 
00593 enum _Tstatus {
00594     OPEN, MIDDLE, END
00595 };
00596 
00597 static const int BONUS_ATTACK_KING[16] = { 0, 0, 8, 16, 32, 64, 128, 256, 512,512,512,512,512,512,512,512 };
00598 
00599 static const u64 PAWN_PROTECTED_MASK[2][64] = { {
00600         0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL,
00601         0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL,
00602         0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL,
00603         0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL,
00604         0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL,
00605         0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL,
00606         0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL,
00607         0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL,
00608         0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL,
00609         0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL,
00610         0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL,
00611         0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL,
00612         0x40000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL,
00613         0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL,
00614         0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 0, 0, 0,
00615         0, 0, 0, 0, 0
00616     }, {
00617         0, 0, 0, 0, 0, 0, 0, 0, 0xFF00ULL, 0xFF00ULL,
00618         0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL,
00619         0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 0x2800ULL, 0x5000ULL,
00620         0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 0xa0000ULL, 0x140000ULL,
00621         0x280000ULL, 0x500000ULL, 0xa00000ULL, 0x400000ULL, 0x2000000ULL,
00622         0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 0x28000000ULL,
00623         0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 0x200000000ULL,
00624         0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 0x2800000000ULL,
00625         0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 0x20000000000ULL,
00626         0x50000000000ULL, 0xa0000000000ULL, 0x140000000000ULL,
00627         0x280000000000ULL, 0x500000000000ULL, 0xa00000000000ULL,
00628         0x400000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL,
00629         0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL,
00630         0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL
00631     }
00632 };
00633 
00634 static const u64 PAWN_BACKWARD_MASK[2][64] = { {
00635         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00636         0ULL, 131584ULL, 328960ULL, 657920ULL, 1315840ULL, 2631680ULL,
00637         5263360ULL, 10526720ULL, 4210688ULL, 33685504ULL, 84213760ULL,
00638         168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL,
00639         1077936128ULL, 8623489024ULL, 21558722560ULL, 43117445120ULL,
00640         86234890240ULL, 172469780480ULL, 344939560960ULL, 689879121920ULL,
00641         275951648768ULL, 2207613190144ULL, 5519032975360ULL, 11038065950720ULL,
00642         22076131901440ULL, 44152263802880ULL, 88304527605760ULL,
00643         176609055211520ULL, 70643622084608ULL, 565148976676864ULL,
00644         1412872441692160ULL, 2825744883384320ULL, 5651489766768640ULL,
00645         11302979533537280ULL, 22605959067074560ULL, 45211918134149120ULL,
00646         18084767253659648ULL, 562949953421312ULL, 1407374883553280ULL,
00647         2814749767106560ULL, 5629499534213120ULL, 11258999068426240ULL,
00648         22517998136852480ULL, 45035996273704960ULL, 18014398509481984ULL, 0ULL,
00649         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00650     }, {
00651         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00652         512ULL, 1280ULL, 2560ULL, 5120ULL, 10240ULL,20480ULL, 40960ULL, 16384ULL,
00653         131584ULL, 328960ULL, 657920ULL,1315840ULL, 2631680ULL, 5263360ULL, 10526720ULL, 4210688ULL,
00654         33685504ULL, 84213760ULL, 168427520ULL, 336855040ULL, 673710080ULL,     1347420160ULL, 2694840320ULL, 1077936128ULL,
00655         8623489024ULL,21558722560ULL, 43117445120ULL, 86234890240ULL, 172469780480ULL,
00656         344939560960ULL, 689879121920ULL, 275951648768ULL, 2207613190144ULL,
00657         5519032975360ULL, 11038065950720ULL, 22076131901440ULL,
00658         44152263802880ULL, 88304527605760ULL, 176609055211520ULL,
00659         70643622084608ULL, 565148976676864ULL, 1412872441692160ULL,
00660         2825744883384320ULL, 5651489766768640ULL, 11302979533537280ULL,
00661         22605959067074560ULL, 45211918134149120ULL, 18084767253659648ULL, 0ULL,
00662         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00663     }
00664 };
00665 
00666 static const u64 PAWN_PASSED_MASK[2][64] = { {
00667         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00668         0x0ULL, 0x0ULL, 0x0ULL, 0x3ULL, 0x7ULL, 0xeULL, 0x1cULL, 0x38ULL,
00669         0x70ULL, 0xe0ULL, 0xc0ULL, 0x303ULL, 0x707ULL, 0xe0eULL, 0x1c1cULL,
00670         0x3838ULL, 0x7070ULL, 0xe0e0ULL, 0xc0c0ULL, 0x30303ULL, 0x70707ULL,
00671         0xe0e0eULL, 0x1c1c1cULL, 0x383838ULL, 0x707070ULL, 0xe0e0e0ULL,
00672         0xc0c0c0ULL, 0x3030303ULL, 0x7070707ULL, 0xe0e0e0eULL, 0x1c1c1c1cULL,
00673         0x38383838ULL, 0x70707070ULL, 0xe0e0e0e0ULL, 0xc0c0c0c0ULL,
00674         0x303030303ULL, 0x707070707ULL, 0xe0e0e0e0eULL, 0x1c1c1c1c1cULL,
00675         0x3838383838ULL, 0x7070707070ULL, 0xe0e0e0e0e0ULL, 0xc0c0c0c0c0ULL,
00676         0x30303030303ULL, 0x70707070707ULL, 0xe0e0e0e0e0eULL,
00677         0x1c1c1c1c1c1cULL, 0x383838383838ULL, 0x707070707070ULL,
00678         0xe0e0e0e0e0e0ULL, 0xc0c0c0c0c0c0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00679         0x0ULL, 0x0ULL, 0x0ULL, 0x0
00680     }, {
00681         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00682         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x303030303030000ULL,
00683         0x707070707070000ULL, 0xe0e0e0e0e0e0000ULL, 0x1c1c1c1c1c1c0000ULL,
00684         0x3838383838380000ULL, 0x7070707070700000ULL, 0xe0e0e0e0e0e00000ULL,
00685         0xc0c0c0c0c0c00000ULL, 0x303030303000000ULL, 0x707070707000000ULL,
00686         0xe0e0e0e0e000000ULL, 0x1c1c1c1c1c000000ULL, 0x3838383838000000ULL,
00687         0x7070707070000000ULL, 0xe0e0e0e0e0000000ULL, 0xc0c0c0c0c0000000ULL,
00688         0x303030300000000ULL, 0x707070700000000ULL, 0xe0e0e0e00000000ULL,
00689         0x1c1c1c1c00000000ULL, 0x3838383800000000ULL, 0x7070707000000000ULL,
00690         0xe0e0e0e000000000ULL, 0xc0c0c0c000000000ULL, 0x303030000000000ULL,
00691         0x707070000000000ULL, 0xe0e0e0000000000ULL, 0x1c1c1c0000000000ULL,
00692         0x3838380000000000ULL, 0x7070700000000000ULL, 0xe0e0e00000000000ULL,
00693         0xc0c0c00000000000ULL, 0x303000000000000ULL, 0x707000000000000ULL,
00694         0xe0e000000000000ULL, 0x1c1c000000000000ULL, 0x3838000000000000ULL,
00695         0x7070000000000000ULL, 0xe0e0000000000000ULL, 0xc0c0000000000000ULL,
00696         0x300000000000000ULL, 0x700000000000000ULL, 0xe00000000000000ULL,
00697         0x1c00000000000000ULL, 0x3800000000000000ULL, 0x7000000000000000ULL,
00698         0xe000000000000000ULL, 0xc000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00699         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0
00700     }
00701 };
00702 
00703 static const uchar PAWN_PASSED[2][64] = { {
00704         200, 200, 200, 200, 200, 200, 200, 200, 100,
00705         100, 100, 100, 100, 100, 100, 100, 40, 40, 40, 40, 40, 40, 40, 40, 19,
00706         19, 19, 21, 21, 19, 19, 19, 13, 13, 13, 25, 25, 13, 13, 13, 0, 0, 0, 0,
00707         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
00708     }, {
00709         0, 0,
00710         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
00711         13, 13, 25, 25, 13, 13, 13, 19, 19, 19, 21, 21, 19, 19, 19, 40, 40, 40,
00712         40, 40, 40, 40, 40, 100, 100, 100, 100, 100, 100, 100, 100, 200, 200,
00713         200, 200, 200, 200, 200, 200
00714     }
00715 };
00716 
00717 
00718 static const u64 PAWN_ISOLATED_MASK[64] = {
00719     0x202020202020202ULL, 0x505050505050505ULL,
00720     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
00721     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
00722     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
00723     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
00724     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL,
00725     0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL,
00726     0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL,
00727     0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL,
00728     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
00729     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
00730     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
00731     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
00732     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL,
00733     0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL,
00734     0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL,
00735     0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL,
00736     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
00737     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
00738     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
00739     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
00740     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL
00741 };
00742 
00743 }
00744 
00745 
00746 static const char DISTANCE_KING_OPENING[64] = {
00747     -16, -16, -16, -16, -16, -16, -16,
00748     -16, -16, -19, -19, -19, -19, -19, -19, -16, -16, -19, -22, -22, -22,
00749     -22, -19, -16, -16, -19, -22, -24, -24, -22, -19, -16, -16, -19, -22,
00750     -24, -24, -22, -19, -16, -16, -19, -22, -22, -22, -22, -19, -16, -16,
00751     -19, -19, -19, -19, -19, -19, -16, -16, -16, -16, -16, -16, -16, -16,
00752     -16
00753 };
00754 
00755 static const char DISTANCE_KING_ENDING[64] = {
00756     30, 30, 30, 30, 30, 30, 30, 30, 30,
00757     32, 32, 32, 32, 32, 32, 30, 30, 32, 34, 34, 34, 34, 32, 30, 30, 32, 34,
00758     36, 36, 34, 32, 30, 30, 32, 34, 36, 36, 34, 32, 30, 30, 32, 34, 34, 34,
00759     34, 32, 30, 30, 32, 32, 32, 32, 32, 32, 30, 30, 30, 30, 30, 30, 30, 30,
00760     30
00761 };
00762 
00763 
00764 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines