Cinnamon  1.1
chess engine
namespaces.h
Go to the documentation of this file.
00001 #ifndef NAMESPACES_H_
00002 #define NAMESPACES_H_
00003 #include <string.h>
00004 #include <algorithm>
00005 #include <sys/stat.h>
00006 #include <sys/timeb.h>
00007 #include <sstream>
00008 #include <climits>
00009 
00010 namespace _board {
00011 using namespace std;
00012 
00013 static const string NAME ="Cinnamon 1.1";
00014 static const string STARTPOS ="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
00015 
00016 typedef unsigned char uchar;
00017 typedef long long unsigned u64;
00018 
00019 #define assert(a) if(!(a)){cout<<dec<<endl<<_time::getLocalTime()<<" ********************************** assert error in "<<_file::extractFileName(__FILE__)<< " line "<<__LINE__<<" "<<" **********************************"<<endl<<flush;exit(1);};
00020 
00021 #ifdef DEBUG_MODE
00022 
00023 #define ASSERT(a) assert(a)
00024 #define INC(a) (a++)
00025 
00026 #else
00027 
00028 #define ASSERT(a)
00029 #define INC(a)
00030 
00031 #endif
00032 
00033 typedef struct {
00034     char promotionPiece;
00035     char pieceFrom;
00036     uchar capturedPiece;
00037     uchar from;
00038     uchar to;
00039     char side;
00040     uchar type;
00041     int score;
00042     bool used;
00043 } _Tmove;
00044 
00045 typedef struct {
00046     _Tmove* moveList;
00047     int size;
00048 } _TmoveP;
00049 
00050 
00051 static const int BLACK = 0;
00052 static const int WHITE = 1;
00053 static const int _INFINITE = 32000;
00054 static const int FUTIL_MARGIN =154;
00055 static const int EXT_FUTILY_MARGIN =392;
00056 static const int RAZOR_MARGIN =1071;
00057 static const u64 POW2_0 =0x1ULL;
00058 static const u64 POW2_1 =0x2ULL;
00059 static const u64 POW2_2 =0x4ULL;
00060 static const u64 POW2_3 =0x8ULL;
00061 static const u64 POW2_4 =0x10ULL;
00062 static const u64 POW2_5 =0x20ULL;
00063 static const u64 POW2_6 =0x40ULL;
00064 static const u64 POW2_7 =0x80ULL;
00065 static const u64 POW2_56 =0x100000000000000ULL;
00066 static const u64 POW2_57 =0x200000000000000ULL;
00067 static const u64 POW2_58 =0x400000000000000ULL;
00068 static const u64 POW2_59 =0x800000000000000ULL;
00069 static const u64 POW2_60 =0x1000000000000000ULL;
00070 static const u64 POW2_61 =0x2000000000000000ULL;
00071 static const u64 POW2_62 =0x4000000000000000ULL;
00072 static const u64 POW2_63 =0x8000000000000000ULL;
00073 static const u64 NOTPOW2_0 =0xfffffffffffffffeULL;
00074 static const u64 NOTPOW2_1 =0xfffffffffffffffdULL;
00075 static const u64 NOTPOW2_2 =0xfffffffffffffffbULL;
00076 static const u64 NOTPOW2_3 =0xfffffffffffffff7ULL;
00077 static const u64 NOTPOW2_4 =0xffffffffffffffefULL;
00078 static const u64 NOTPOW2_5 =0xffffffffffffffdfULL;
00079 static const u64 NOTPOW2_7 =0xffffffffffffff7fULL;
00080 static const u64 NOTPOW2_56 =0xfeffffffffffffffULL;
00081 static const u64 NOTPOW2_57 =0xfdffffffffffffffULL;
00082 static const u64 NOTPOW2_58 =0xfbffffffffffffffULL;
00083 static const u64 NOTPOW2_59 =0xf7ffffffffffffffULL;
00084 static const u64 NOTPOW2_60 =0xefffffffffffffffULL;
00085 static const u64 NOTPOW2_61 =0xdfffffffffffffffULL;
00086 static const u64 NOTPOW2_63 =0x7fffffffffffffffULL;
00087 
00088 static const string BOARD[64] = {
00089     "h1", "g1", "f1", "e1", "d1", "c1", "b1", "a1",
00090     "h2", "g2", "f2", "e2", "d2", "c2", "b2", "a2",
00091     "h3", "g3", "f3", "e3", "d3", "c3", "b3", "a3",
00092     "h4", "g4", "f4", "e4", "d4", "c4", "b4", "a4",
00093     "h5", "g5", "f5", "e5", "d5", "c5", "b5", "a5",
00094     "h6", "g6", "f6", "e6", "d6", "c6", "b6", "a6",
00095     "h7", "g7", "f7", "e7", "d7", "c7", "b7", "a7",
00096     "h8", "g8", "f8", "e8", "d8", "c8", "b8", "a8"
00097 };
00098 
00099 static const char FEN_PIECE[]= {'p','P','r','R','b','B','n','N','k','K','q','Q','-'};
00100 
00101 static const int INV_FEN[]= {
00102     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00103     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00104     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00105     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,
00106     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,
00107     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00108     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00109     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
00110     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,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,0xFF,
00112     0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
00113 };
00114 
00115 static const uchar ORIZ_RIGHT[]= {
00116     0,0,0,0,0,0,0,0,
00117     8,8,8,8,8,8,8,8,
00118     16,16,16,16,16,16,16,16,
00119     24,24,24,24,24,24,24,24,
00120     32,32,32,32,32,32,32,32,
00121     40,40,40,40,40,40,40,40,
00122     48,48,48,48,48,48,48,48,
00123     56,56,56,56,56,56,56,56
00124 };
00125 
00126 static const uchar ORIZ_LEFT[]= {
00127     7,7,7,7,7,7,7,7,
00128     15,15,15,15,15,15,15,15,
00129     23,23,23,23,23,23,23,23,
00130     31,31,31,31,31,31,31,31,
00131     39,39,39,39,39,39,39,39,
00132     47,47,47,47,47,47,47,47,
00133     55,55,55,55,55,55,55,55,
00134     63,63,63,63,63,63,63,63
00135 };
00136 
00137 static const uchar VERT_UPPER[]= {
00138     56,57,58,59,60,61,62,63,
00139     56,57,58,59,60,61,62,63,
00140     56,57,58,59,60,61,62,63,
00141     56,57,58,59,60,61,62,63,
00142     56,57,58,59,60,61,62,63,
00143     56,57,58,59,60,61,62,63,
00144     56,57,58,59,60,61,62,63,
00145     56,57,58,59,60,61,62,63
00146 };
00147 
00148 static const uchar VERT_LOWER[]= {
00149     0,1,2,3,4,5,6,7,
00150     0,1,2,3,4,5,6,7,
00151     0,1,2,3,4,5,6,7,
00152     0,1,2,3,4,5,6,7,
00153     0,1,2,3,4,5,6,7,
00154     0,1,2,3,4,5,6,7,
00155     0,1,2,3,4,5,6,7,
00156     0,1,2,3,4,5,6,7
00157 };
00158 
00159 static const u64 RANDOM_KEY[15][64]= {
00160 #include "random.inc"
00161 };
00162 
00163 static const uchar RIGHT_UPPER[]= {
00164     63, 55, 47, 39, 31, 23, 15, 7,
00165     62, 63, 55, 47, 39, 31, 23, 15,
00166     61, 62, 63, 55, 47, 39, 31, 23,
00167     60, 61, 62, 63, 55, 47, 39, 31,
00168     59, 60, 61, 62, 63, 55, 47, 39,
00169     58, 59, 60, 61, 62, 63, 55, 47,
00170     57, 58, 59, 60, 61, 62, 63, 55,
00171     56, 57, 58, 59, 60, 61, 62, 63
00172 };
00173 
00174 static const uchar RIGHT_LOWER[]= {
00175     0, 1, 2, 3, 4, 5, 6, 7,
00176     8, 0, 1, 2, 3, 4, 5, 6,
00177     16, 8, 0, 1, 2, 3, 4, 5,
00178     24, 16, 8, 0, 1, 2, 3, 4,
00179     32, 24, 16, 8, 0, 1, 2, 3,
00180     40, 32, 24, 16, 8, 0, 1, 2,
00181     48, 40, 32, 24, 16, 8, 0, 1,
00182     56, 48, 40, 32, 24, 16, 8, 0
00183 };
00184 
00185 static const uchar LEFT_UPPER[]= {
00186     0, 8, 16, 24, 32, 40, 48, 56,
00187     8, 16, 24, 32, 40, 48, 56, 57,
00188     16, 24, 32, 40, 48, 56, 57, 58,
00189     24, 32, 40, 48, 56, 57, 58, 59,
00190     32, 40, 48, 56, 57, 58, 59, 60,
00191     40, 48, 56, 57, 58, 59, 60, 61,
00192     48, 56, 57, 58, 59, 60, 61, 62,
00193     56, 57, 58, 59, 60, 61, 62, 63
00194 };
00195 
00196 static const uchar LEFT_LOWER[]= {
00197     0, 1, 2, 3, 4, 5, 6, 7,
00198     1, 2, 3, 4, 5, 6, 7, 15,
00199     2, 3, 4, 5, 6, 7, 15, 23,
00200     3, 4, 5, 6, 7, 15, 23, 31,
00201     4, 5, 6, 7, 15, 23, 31, 39,
00202     5, 6, 7, 15, 23, 31, 39, 47,
00203     6, 7, 15, 23, 31, 39, 47, 55,
00204     7, 15, 23, 31, 39, 47, 55, 63
00205 };
00206 
00207 static const u64 MASK_BIT_UNSET_RIGHT_UP[]= {
00208     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,
00209     0x0ULL,0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,
00210     0x0ULL,0x100ULL,0x201ULL,0x402ULL,0x804ULL,0x1008ULL,0x2010ULL,0x4020ULL,
00211     0x0ULL,0x10000ULL,0x20100ULL,0x40201ULL,0x80402ULL,0x100804ULL,0x201008ULL,0x402010ULL,
00212     0x0ULL,0x1000000ULL,0x2010000ULL,0x4020100ULL,0x8040201ULL,0x10080402ULL,0x20100804ULL,0x40201008ULL,
00213     0x0ULL,0x100000000ULL,0x201000000ULL,0x402010000ULL,0x804020100ULL,0x1008040201ULL,0x2010080402ULL,0x4020100804ULL,
00214     0x0ULL,0x10000000000ULL,0x20100000000ULL,0x40201000000ULL,0x80402010000ULL,0x100804020100ULL,0x201008040201ULL,0x402010080402ULL,
00215     0x0ULL,0x1000000000000ULL,0x2010000000000ULL,0x4020100000000ULL,0x8040201000000ULL,0x10080402010000ULL,0x20100804020100ULL,0x40201008040201ULL
00216 };
00217 
00218 static const u64 MASK_BIT_UNSET_RIGHT_DOWN[]= {
00219     0x8040201008040200ULL,0x80402010080400ULL,0x804020100800ULL,0x8040201000ULL,0x80402000ULL,0x804000ULL,0x8000ULL,0x0ULL,
00220     0x4020100804020000ULL,0x8040201008040000ULL,0x80402010080000ULL,0x804020100000ULL,0x8040200000ULL,0x80400000ULL,0x800000ULL,0x0ULL,
00221     0x2010080402000000ULL,0x4020100804000000ULL,0x8040201008000000ULL,0x80402010000000ULL,0x804020000000ULL,0x8040000000ULL,0x80000000ULL,0x0ULL,
00222     0x1008040200000000ULL,0x2010080400000000ULL,0x4020100800000000ULL,0x8040201000000000ULL,0x80402000000000ULL,0x804000000000ULL,0x8000000000ULL,0x0ULL,
00223     0x804020000000000ULL,0x1008040000000000ULL,0x2010080000000000ULL,0x4020100000000000ULL,0x8040200000000000ULL,0x80400000000000ULL,0x800000000000ULL,0x0ULL,
00224     0x402000000000000ULL,0x804000000000000ULL,0x1008000000000000ULL,0x2010000000000000ULL,0x4020000000000000ULL,0x8040000000000000ULL,0x80000000000000ULL,0x0ULL,
00225     0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL,0x8000000000000000ULL,0x0ULL,
00226     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL
00227 };
00228 
00229 static const u64 MASK_BIT_UNSET_LEFT_UP[]= {
00230     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,
00231     0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x0ULL,
00232     0x204ULL,0x408ULL,0x810ULL,0x1020ULL,0x2040ULL,0x4080ULL,0x8000ULL,0x0ULL,
00233     0x20408ULL,0x40810ULL,0x81020ULL,0x102040ULL,0x204080ULL,0x408000ULL,0x800000ULL,0x0ULL,
00234     0x2040810ULL,0x4081020ULL,0x8102040ULL,0x10204080ULL,0x20408000ULL,0x40800000ULL,0x80000000ULL,0x0ULL,
00235     0x204081020ULL,0x408102040ULL,0x810204080ULL,0x1020408000ULL,0x2040800000ULL,0x4080000000ULL,0x8000000000ULL,0x0ULL,
00236     0x20408102040ULL,0x40810204080ULL,0x81020408000ULL,0x102040800000ULL,0x204080000000ULL,0x408000000000ULL,0x800000000000ULL,0x0ULL,
00237     0x2040810204080ULL,0x4081020408000ULL,0x8102040800000ULL,0x10204080000000ULL,0x20408000000000ULL,0x40800000000000ULL,0x80000000000000ULL,0x0ULL
00238 };
00239 
00240 static const u64 MASK_BIT_UNSET_LEFT_DOWN[]= {
00241     0x0ULL,0x100ULL,0x10200ULL,0x1020400ULL,0x102040800ULL,0x10204081000ULL,0x1020408102000ULL,0x102040810204000ULL,
00242     0x0ULL,0x10000ULL,0x1020000ULL,0x102040000ULL,0x10204080000ULL,0x1020408100000ULL,0x102040810200000ULL,0x204081020400000ULL,
00243     0x0ULL,0x1000000ULL,0x102000000ULL,0x10204000000ULL,0x1020408000000ULL,0x102040810000000ULL,0x204081020000000ULL,0x408102040000000ULL,
00244     0x0ULL,0x100000000ULL,0x10200000000ULL,0x1020400000000ULL,0x102040800000000ULL,0x204081000000000ULL,0x408102000000000ULL,0x810204000000000ULL,
00245     0x0ULL,0x10000000000ULL,0x1020000000000ULL,0x102040000000000ULL,0x204080000000000ULL,0x408100000000000ULL,0x810200000000000ULL,0x1020400000000000ULL,
00246     0x0ULL,0x1000000000000ULL,0x102000000000000ULL,0x204000000000000ULL,0x408000000000000ULL,0x810000000000000ULL,0x1020000000000000ULL,0x2040000000000000ULL,
00247     0x0ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL,
00248     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL
00249 };
00250 
00251 static const u64 MASK_BIT_UNSET_DOWN[]= {
00252     0x101010101010100ULL,0x202020202020200ULL,0x404040404040400ULL,0x808080808080800ULL,0x1010101010101000ULL,0x2020202020202000ULL,0x4040404040404000ULL,0x8080808080808000ULL,
00253     0x101010101010000ULL,0x202020202020000ULL,0x404040404040000ULL,0x808080808080000ULL,0x1010101010100000ULL,0x2020202020200000ULL,0x4040404040400000ULL,0x8080808080800000ULL,
00254     0x101010101000000ULL,0x202020202000000ULL,0x404040404000000ULL,0x808080808000000ULL,0x1010101010000000ULL,0x2020202020000000ULL,0x4040404040000000ULL,0x8080808080000000ULL,
00255     0x101010100000000ULL,0x202020200000000ULL,0x404040400000000ULL,0x808080800000000ULL,0x1010101000000000ULL,0x2020202000000000ULL,0x4040404000000000ULL,0x8080808000000000ULL,
00256     0x101010000000000ULL,0x202020000000000ULL,0x404040000000000ULL,0x808080000000000ULL,0x1010100000000000ULL,0x2020200000000000ULL,0x4040400000000000ULL,0x8080800000000000ULL,
00257     0x101000000000000ULL,0x202000000000000ULL,0x404000000000000ULL,0x808000000000000ULL,0x1010000000000000ULL,0x2020000000000000ULL,0x4040000000000000ULL,0x8080000000000000ULL,
00258     0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,0x4000000000000000ULL,0x8000000000000000ULL,
00259     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL
00260 };
00261 
00262 static const u64 MASK_BIT_UNSET_UP[]= {
00263     0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,0x0ULL,
00264     0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,
00265     0x101ULL,0x202ULL,0x404ULL,0x808ULL,0x1010ULL,0x2020ULL,0x4040ULL,0x8080ULL,
00266     0x10101ULL,0x20202ULL,0x40404ULL,0x80808ULL,0x101010ULL,0x202020ULL,0x404040ULL,0x808080ULL,
00267     0x1010101ULL,0x2020202ULL,0x4040404ULL,0x8080808ULL,0x10101010ULL,0x20202020ULL,0x40404040ULL,0x80808080ULL,
00268     0x101010101ULL,0x202020202ULL,0x404040404ULL,0x808080808ULL,0x1010101010ULL,0x2020202020ULL,0x4040404040ULL,0x8080808080ULL,
00269     0x10101010101ULL,0x20202020202ULL,0x40404040404ULL,0x80808080808ULL,0x101010101010ULL,0x202020202020ULL,0x404040404040ULL,0x808080808080ULL,
00270     0x1010101010101ULL,0x2020202020202ULL,0x4040404040404ULL,0x8080808080808ULL,0x10101010101010ULL,0x20202020202020ULL,0x40404040404040ULL,0x80808080808080ULL
00271 };
00272 
00273 static const u64 MASK_BIT_UNSET_LEFT[]= {
00274     0x0ULL,0x1ULL,0x3ULL,0x7ULL,0xfULL,0x1fULL,0x3fULL,0x7fULL,
00275     0x0ULL,0x100ULL,0x300ULL,0x700ULL,0xf00ULL,0x1f00ULL,0x3f00ULL,0x7f00ULL,
00276     0x0ULL,0x10000ULL,0x30000ULL,0x70000ULL,0xf0000ULL,0x1f0000ULL,0x3f0000ULL,0x7f0000ULL,
00277     0x0ULL,0x1000000ULL,0x3000000ULL,0x7000000ULL,0xf000000ULL,0x1f000000ULL,0x3f000000ULL,0x7f000000ULL,
00278     0x0ULL,0x100000000ULL,0x300000000ULL,0x700000000ULL,0xf00000000ULL,0x1f00000000ULL,0x3f00000000ULL,0x7f00000000ULL,
00279     0x0ULL,0x10000000000ULL,0x30000000000ULL,0x70000000000ULL,0xf0000000000ULL,0x1f0000000000ULL,0x3f0000000000ULL,0x7f0000000000ULL,
00280     0x0ULL,0x1000000000000ULL,0x3000000000000ULL,0x7000000000000ULL,0xf000000000000ULL,0x1f000000000000ULL,0x3f000000000000ULL,0x7f000000000000ULL,
00281     0x0ULL,0x100000000000000ULL,0x300000000000000ULL,0x700000000000000ULL,0xf00000000000000ULL,0x1f00000000000000ULL,0x3f00000000000000ULL,0x7f00000000000000ULL
00282 };
00283 
00284 static const u64 MASK_BIT_UNSET_RIGHT[]= {
00285     0xfeULL,0xfcULL,0xf8ULL,0xf0ULL,0xe0ULL,0xc0ULL,0x80ULL,0x0ULL,
00286     0xfe00ULL,0xfc00ULL,0xf800ULL,0xf000ULL,0xe000ULL,0xc000ULL,0x8000ULL,0x0ULL,
00287     0xfe0000ULL,0xfc0000ULL,0xf80000ULL,0xf00000ULL,0xe00000ULL,0xc00000ULL,0x800000ULL,0x0ULL,
00288     0xfe000000ULL,0xfc000000ULL,0xf8000000ULL,0xf0000000ULL,0xe0000000ULL,0xc0000000ULL,0x80000000,0x0ULL,
00289     0xfe00000000ULL,0xfc00000000ULL,0xf800000000ULL,0xf000000000ULL,0xe000000000ULL,0xc000000000ULL,0x8000000000ULL,0x0ULL,
00290     0xfe0000000000ULL,0xfc0000000000ULL,0xf80000000000ULL,0xf00000000000ULL,0xe00000000000ULL,0xc00000000000ULL,0x800000000000ULL,0x0ULL,
00291     0xfe000000000000ULL,0xfc000000000000ULL,0xf8000000000000ULL,0xf0000000000000ULL,0xe0000000000000ULL,0xc0000000000000ULL,0x80000000000000ULL,0x0ULL,
00292     0xfe00000000000000ULL,0xfc00000000000000ULL,0xf800000000000000ULL,0xf000000000000000ULL,0xe000000000000000ULL,0xc000000000000000ULL,0x8000000000000000ULL,0x0ULL
00293 };
00294 
00295 static const u64 RANK_FILE[64] = {
00296     0x1010101010101feULL, 0x2020202020202fdULL,
00297     0x4040404040404fbULL, 0x8080808080808f7ULL, 0x10101010101010efULL,
00298     0x20202020202020dfULL, 0x40404040404040bfULL, 0x808080808080807fULL,
00299     0x10101010101fe01ULL, 0x20202020202fd02ULL, 0x40404040404fb04ULL,
00300     0x80808080808f708ULL, 0x101010101010ef10ULL, 0x202020202020df20ULL,
00301     0x404040404040bf40ULL, 0x8080808080807f80ULL, 0x101010101fe0101ULL,
00302     0x202020202fd0202ULL, 0x404040404fb0404ULL, 0x808080808f70808ULL,
00303     0x1010101010ef1010ULL, 0x2020202020df2020ULL, 0x4040404040bf4040ULL,
00304     0x80808080807f8080ULL, 0x1010101fe010101ULL, 0x2020202fd020202ULL,
00305     0x4040404fb040404ULL, 0x8080808f7080808ULL, 0x10101010ef101010ULL,
00306     0x20202020df202020ULL, 0x40404040bf404040ULL, 0x808080807f808080ULL,
00307     0x10101fe01010101ULL, 0x20202fd02020202ULL, 0x40404fb04040404ULL,
00308     0x80808f708080808ULL, 0x101010ef10101010ULL, 0x202020df20202020ULL,
00309     0x404040bf40404040ULL, 0x8080807f80808080ULL, 0x101fe0101010101ULL,
00310     0x202fd0202020202ULL, 0x404fb0404040404ULL, 0x808f70808080808ULL,
00311     0x1010ef1010101010ULL, 0x2020df2020202020ULL, 0x4040bf4040404040ULL,
00312     0x80807f8080808080ULL, 0x1fe010101010101ULL, 0x2fd020202020202ULL,
00313     0x4fb040404040404ULL, 0x8f7080808080808ULL, 0x10ef101010101010ULL,
00314     0x20df202020202020ULL, 0x40bf404040404040ULL, 0x807f808080808080ULL,
00315     0xfe01010101010101ULL, 0xfd02020202020202ULL, 0xfb04040404040404ULL,
00316     0xf708080808080808ULL, 0xef10101010101010ULL, 0xdf20202020202020ULL,
00317     0xbf40404040404040ULL, 0x7f80808080808080ULL
00318 };
00319 
00320 static const u64 RANK_BOUND[64] = {
00321     0x2ULL, 0x5ULL, 0xaULL, 0x14ULL, 0x28ULL,
00322     0x50ULL, 0xa0ULL, 0x40ULL, 0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL,
00323     0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL,
00324     0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL,
00325     0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL,
00326     0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL,
00327     0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL,
00328     0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL,
00329     0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL,
00330     0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL,
00331     0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL,
00332     0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL,
00333     0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL,
00334     0x40000000000000ULL, 0x200000000000000ULL, 0x500000000000000ULL,
00335     0xa00000000000000ULL, 0x1400000000000000ULL, 0x2800000000000000ULL,
00336     0x5000000000000000ULL, 0xa000000000000000ULL, 0x4000000000000000ULL
00337 };
00338 
00339 static const u64 RANK[64] = {
00340     0xffULL, 0xffULL, 0xffULL, 0xffULL, 0xffULL,
00341     0xffULL, 0xffULL, 0xffULL, 0xff00ULL, 0xff00ULL, 0xff00ULL,
00342     0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff00ULL, 0xff0000ULL,
00343     0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL, 0xff0000ULL,
00344     0xff0000ULL, 0xff0000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL,
00345     0xff000000ULL, 0xff000000ULL, 0xff000000ULL, 0xff000000ULL,
00346     0xff000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL,
00347     0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL, 0xff00000000ULL,
00348     0xff00000000ULL, 0xff0000000000ULL, 0xff0000000000ULL,
00349     0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL,
00350     0xff0000000000ULL, 0xff0000000000ULL, 0xff0000000000ULL, 0xff000000000000ULL,
00351     0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL,
00352     0xff000000000000ULL, 0xff000000000000ULL, 0xff000000000000ULL,
00353     0xff000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL,
00354     0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL,
00355     0xff00000000000000ULL, 0xff00000000000000ULL, 0xff00000000000000ULL
00356 };
00357 
00358 static const u64 RIGHT_DIAG[64] = {
00359     0x8040201008040200ULL, 0x80402010080400ULL,
00360     0x804020100800ULL, 0x8040201000ULL, 0x80402000ULL, 0x804000ULL,
00361     0x8000ULL, 0x0ULL, 0x4020100804020000ULL, 0x8040201008040001ULL,
00362     0x80402010080002ULL, 0x804020100004ULL, 0x8040200008ULL, 0x80400010ULL,
00363     0x800020ULL, 0x40ULL, 0x2010080402000000ULL, 0x4020100804000100ULL,
00364     0x8040201008000201ULL, 0x80402010000402ULL, 0x804020000804ULL,
00365     0x8040001008ULL, 0x80002010ULL, 0x4020ULL, 0x1008040200000000ULL,
00366     0x2010080400010000ULL, 0x4020100800020100ULL, 0x8040201000040201ULL,
00367     0x80402000080402ULL, 0x804000100804ULL, 0x8000201008ULL, 0x402010ULL,
00368     0x804020000000000ULL, 0x1008040001000000ULL, 0x2010080002010000ULL,
00369     0x4020100004020100ULL, 0x8040200008040201ULL, 0x80400010080402ULL,
00370     0x800020100804ULL, 0x40201008ULL, 0x402000000000000ULL,
00371     0x804000100000000ULL, 0x1008000201000000ULL, 0x2010000402010000ULL,
00372     0x4020000804020100ULL, 0x8040001008040201ULL, 0x80002010080402ULL,
00373     0x4020100804ULL, 0x200000000000000ULL, 0x400010000000000ULL,
00374     0x800020100000000ULL, 0x1000040201000000ULL, 0x2000080402010000ULL,
00375     0x4000100804020100ULL, 0x8000201008040201ULL, 0x402010080402ULL,
00376     0x0ULL, 0x1000000000000ULL, 0x2010000000000ULL, 0x4020100000000ULL,
00377     0x8040201000000ULL, 0x10080402010000ULL, 0x20100804020100ULL,
00378     0x40201008040201ULL
00379 };
00380 
00381 static const u64 LEFT_DIAG[64] = {
00382     0x0ULL, 0x100ULL, 0x10200ULL, 0x1020400ULL,
00383     0x102040800ULL, 0x10204081000ULL, 0x1020408102000ULL,
00384     0x102040810204000ULL, 0x2ULL, 0x10004ULL, 0x1020008ULL, 0x102040010ULL,
00385     0x10204080020ULL, 0x1020408100040ULL, 0x102040810200080ULL,
00386     0x204081020400000ULL, 0x204ULL, 0x1000408ULL, 0x102000810ULL,
00387     0x10204001020ULL, 0x1020408002040ULL, 0x102040810004080ULL,
00388     0x204081020008000ULL, 0x408102040000000ULL, 0x20408ULL, 0x100040810ULL,
00389     0x10200081020ULL, 0x1020400102040ULL, 0x102040800204080ULL,
00390     0x204081000408000ULL, 0x408102000800000ULL, 0x810204000000000ULL,
00391     0x2040810ULL, 0x10004081020ULL, 0x1020008102040ULL,
00392     0x102040010204080ULL, 0x204080020408000ULL, 0x408100040800000ULL,
00393     0x810200080000000ULL, 0x1020400000000000ULL, 0x204081020ULL,
00394     0x1000408102040ULL, 0x102000810204080ULL, 0x204001020408000ULL,
00395     0x408002040800000ULL, 0x810004080000000ULL, 0x1020008000000000ULL,
00396     0x2040000000000000ULL, 0x20408102040ULL, 0x100040810204080ULL,
00397     0x200081020408000ULL, 0x400102040800000ULL, 0x800204080000000ULL,
00398     0x1000408000000000ULL, 0x2000800000000000ULL, 0x4000000000000000ULL,
00399     0x2040810204080ULL, 0x4081020408000ULL, 0x8102040800000ULL,
00400     0x10204080000000ULL, 0x20408000000000ULL, 0x40800000000000ULL,
00401     0x80000000000000ULL, 0x0ULL
00402 };
00403 
00404 static const u64 LEFT_RIGHT_DIAG[64] = {
00405     0x8040201008040200ULL,0x80402010080500ULL,0x804020110a00ULL,0x8041221400ULL,0x182442800ULL,
00406     0x10204885000ULL,0x102040810a000ULL,0x102040810204000ULL,0x4020100804020002ULL,0x8040201008050005ULL,0x804020110a000aULL,
00407     0x804122140014ULL,0x18244280028ULL,0x1020488500050ULL,0x102040810a000a0ULL,0x204081020400040ULL,0x2010080402000204ULL,
00408     0x4020100805000508ULL,0x804020110a000a11ULL,0x80412214001422ULL,0x1824428002844ULL,0x102048850005088ULL,0x2040810a000a010ULL,
00409     0x408102040004020ULL,0x1008040200020408ULL,0x2010080500050810ULL,0x4020110a000a1120ULL,0x8041221400142241ULL,0x182442800284482ULL,0x204885000508804ULL,
00410     0x40810a000a01008ULL,0x810204000402010ULL,0x804020002040810ULL,0x1008050005081020ULL,0x20110a000a112040ULL,0x4122140014224180ULL,0x8244280028448201ULL,
00411     0x488500050880402ULL,0x810a000a0100804ULL,0x1020400040201008ULL,0x402000204081020ULL,0x805000508102040ULL,0x110a000a11204080ULL,
00412     0x2214001422418000ULL,0x4428002844820100ULL,0x8850005088040201ULL,0x10a000a010080402ULL,0x2040004020100804ULL,0x200020408102040ULL,
00413     0x500050810204080ULL,0xa000a1120408000ULL,0x1400142241800000ULL,0x2800284482010000ULL,0x5000508804020100ULL,0xa000a01008040201ULL,
00414     0x4000402010080402ULL,0x2040810204080ULL,0x5081020408000ULL,0xa112040800000ULL,0x14224180000000ULL,0x28448201000000ULL,0x50880402010000ULL,
00415     0xa0100804020100ULL,0x40201008040201ULL
00416 };
00417 
00418 static const u64 LEFT_RIGHT_RANK_FILE[64] = {
00419     0x81412111090503feULL,0x2824222120a07fdULL,0x404844424150efbULL,0x8080888492a1cf7ULL,0x10101011925438efULL,0x2020212224a870dfULL,0x404142444850e0bfULL,0x8182848890a0c07fULL,
00420     0x412111090503fe03ULL,0x824222120a07fd07ULL,0x4844424150efb0eULL,0x80888492a1cf71cULL,0x101011925438ef38ULL,0x20212224a870df70ULL,0x4142444850e0bfe0ULL,0x82848890a0c07fc0ULL,
00421     0x2111090503fe0305ULL,0x4222120a07fd070aULL,0x844424150efb0e15ULL,0x888492a1cf71c2aULL,0x1011925438ef3854ULL,0x212224a870df70a8ULL,0x42444850e0bfe050ULL,0x848890a0c07fc0a0ULL,
00422     0x11090503fe030509ULL,0x22120a07fd070a12ULL,0x4424150efb0e1524ULL,0x88492a1cf71c2a49ULL,0x11925438ef385492ULL,0x2224a870df70a824ULL,0x444850e0bfe05048ULL,0x8890a0c07fc0a090ULL,
00423     0x90503fe03050911ULL,0x120a07fd070a1222ULL,0x24150efb0e152444ULL,0x492a1cf71c2a4988ULL,0x925438ef38549211ULL,0x24a870df70a82422ULL,0x4850e0bfe0504844ULL,0x90a0c07fc0a09088ULL,
00424     0x503fe0305091121ULL,0xa07fd070a122242ULL,0x150efb0e15244484ULL,0x2a1cf71c2a498808ULL,0x5438ef3854921110ULL,0xa870df70a8242221ULL,0x50e0bfe050484442ULL,0xa0c07fc0a0908884ULL,
00425     0x3fe030509112141ULL,0x7fd070a12224282ULL,0xefb0e1524448404ULL,0x1cf71c2a49880808ULL,0x38ef385492111010ULL,0x70df70a824222120ULL,0xe0bfe05048444241ULL,0xc07fc0a090888482ULL,
00426     0xfe03050911214181ULL,0xfd070a1222428202ULL,0xfb0e152444840404ULL,0xf71c2a4988080808ULL,0xef38549211101010ULL,0xdf70a82422212020ULL,0xbfe0504844424140ULL,0x7fc0a09088848281ULL
00427 };
00428 
00429 static const char FILE_AT[64] = {
00430     0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
00431     0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4,
00432     5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7
00433 };
00434 
00435 static const char RANK_AT[64] = {
00436     0,0,0,0,0,0,0,0,
00437     1,1,1,1,1,1,1,1,
00438     2,2,2,2,2,2,2,2,
00439     3,3,3,3,3,3,3,3,
00440     4,4,4,4,4,4,4,4,
00441     5,5,5,5,5,5,5,5,
00442     6,6,6,6,6,6,6,6,
00443     7,7,7,7,7,7,7,7
00444 };
00445 static const u64 PAWNS_8_1[2] = { 0xFFULL,0xFF00000000000000ULL };
00446 
00447 static const u64 PAWNS_JUMP[2] = { 0xFF000000000000ULL,0xFF00ULL };
00448 static const u64 PAWNS_7_2[2] = { 0xFF00ULL,0xFF000000000000ULL };
00449 
00450 static const u64 FILE_[64] = {
00451     0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00452     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00453     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,0x4040404040404040ULL,
00454     0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00455     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00456     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00457     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00458     0x4040404040404040ULL,0x8080808080808080ULL,0x101010101010101ULL,0x202020202020202ULL,0x404040404040404ULL,0x808080808080808ULL,0x1010101010101010ULL,0x2020202020202020ULL,
00459     0x4040404040404040ULL,0x8080808080808080ULL
00460 };
00461 
00462 static const u64 POW2[64] = {
00463     0x1ULL,0x2ULL,0x4ULL,0x8ULL,0x10ULL,0x20ULL,0x40ULL,0x80ULL,0x100ULL,0x200ULL,0x400ULL,0x800ULL,0x1000ULL,0x2000ULL,0x4000ULL,0x8000ULL,0x10000ULL,0x20000ULL,
00464     0x40000ULL,0x80000ULL,0x100000ULL,0x200000ULL,0x400000ULL,0x800000ULL,0x1000000ULL,0x2000000ULL,0x4000000ULL,0x8000000ULL,0x10000000ULL,0x20000000ULL,0x40000000ULL,0x80000000ULL,
00465     0x100000000ULL,0x200000000ULL,0x400000000ULL,0x800000000ULL,0x1000000000ULL,0x2000000000ULL,0x4000000000ULL,0x8000000000ULL,0x10000000000ULL,0x20000000000ULL,0x40000000000ULL,
00466     0x80000000000ULL,0x100000000000ULL,0x200000000000ULL,0x400000000000ULL,0x800000000000ULL,0x1000000000000ULL,0x2000000000000ULL,0x4000000000000ULL,0x8000000000000ULL,0x10000000000000ULL,
00467     0x20000000000000ULL,0x40000000000000ULL,0x80000000000000ULL,0x100000000000000ULL,0x200000000000000ULL,0x400000000000000ULL,0x800000000000000ULL,0x1000000000000000ULL,0x2000000000000000ULL,
00468     0x4000000000000000ULL,0x8000000000000000ULL
00469 };
00470 
00471 static const u64 NOTPOW2[64] = {
00472     0xfffffffffffffffeULL,0xfffffffffffffffdULL,0xfffffffffffffffbULL,0xfffffffffffffff7ULL,0xffffffffffffffefULL,0xffffffffffffffdfULL,0xffffffffffffffbfULL,
00473     0xffffffffffffff7fULL,0xfffffffffffffeffULL,0xfffffffffffffdffULL,0xfffffffffffffbffULL,0xfffffffffffff7ffULL,0xffffffffffffefffULL,0xffffffffffffdfffULL,0xffffffffffffbfffULL,
00474     0xffffffffffff7fffULL,0xfffffffffffeffffULL,0xfffffffffffdffffULL,0xfffffffffffbffffULL,0xfffffffffff7ffffULL,0xffffffffffefffffULL,0xffffffffffdfffffULL,0xffffffffffbfffffULL,
00475     0xffffffffff7fffffULL,0xfffffffffeffffffULL,0xfffffffffdffffffULL,0xfffffffffbffffffULL,0xfffffffff7ffffffULL,0xffffffffefffffffULL,0xffffffffdfffffffULL,0xffffffffbfffffffULL,
00476     0xffffffff7fffffffULL,0xfffffffeffffffffULL,0xfffffffdffffffffULL,0xfffffffbffffffffULL,0xfffffff7ffffffffULL,0xffffffefffffffffULL,0xffffffdfffffffffULL,0xffffffbfffffffffULL,
00477     0xffffff7fffffffffULL,0xfffffeffffffffffULL,0xfffffdffffffffffULL,0xfffffbffffffffffULL,0xfffff7ffffffffffULL,0xffffefffffffffffULL,0xffffdfffffffffffULL,0xffffbfffffffffffULL,
00478     0xffff7fffffffffffULL,0xfffeffffffffffffULL,0xfffdffffffffffffULL,0xfffbffffffffffffULL,0xfff7ffffffffffffULL,0xffefffffffffffffULL,0xffdfffffffffffffULL,0xffbfffffffffffffULL,
00479     0xff7fffffffffffffULL,0xfeffffffffffffffULL,0xfdffffffffffffffULL,0xfbffffffffffffffULL,0xf7ffffffffffffffULL,0xefffffffffffffffULL,0xdfffffffffffffffULL,0xbfffffffffffffffULL,
00480     0x7fffffffffffffffULL
00481 };
00482 
00483 static const u64 PAWN_FORK_MASK[2][64] = { {
00484         0,0,0,0,0,0,0,0,
00485 
00486         0x2ULL,
00487         0x5ULL,
00488         0xaULL,
00489         0x14ULL,
00490         0x28ULL,
00491         0x50ULL,
00492         0xa0ULL,
00493         0x40ULL,
00494 
00495         0x200ULL,
00496         0x500ULL,
00497         0xa00ULL,
00498         0x1400ULL,
00499         0x2800ULL,
00500         0x5000ULL,
00501         0xa000ULL,
00502         0x4000ULL,
00503 
00504         0x20000ULL,
00505         0x50000ULL,
00506         0xa0000ULL,
00507         0x140000ULL,
00508         0x280000ULL,
00509         0x500000ULL,
00510         0xa00000ULL,
00511         0x400000ULL,
00512 
00513         0x2000000ULL,
00514         0x5000000ULL,
00515         0xa000000ULL,
00516         0x14000000ULL,
00517         0x28000000ULL,
00518         0x50000000ULL,
00519         0xa0000000ULL,
00520         0x40000000ULL,
00521 
00522         0x200000000ULL,
00523         0x500000000ULL,
00524         0xa00000000ULL,
00525         0x1400000000ULL,
00526         0x2800000000ULL,
00527         0x5000000000ULL,
00528         0xa000000000ULL,
00529         0x4000000000ULL,
00530 
00531         0x20000000000ULL,
00532         0x50000000000ULL,
00533         0xa0000000000ULL,
00534         0x140000000000ULL,
00535         0x280000000000ULL,
00536         0x500000000000ULL,
00537         0xa00000000000ULL,
00538         0x400000000000ULL,
00539 
00540         0,0,0,0,0,0,0,0
00541 
00542     }, {
00543         0,0,0,0,0,0,0,0,
00544 
00545         0x20000ULL,
00546         0x50000ULL,
00547         0xa0000ULL,
00548         0x140000ULL,
00549         0x280000ULL,
00550         0x500000ULL,
00551         0xa00000ULL,
00552         0x400000ULL,
00553 
00554         0x2000000ULL,
00555         0x5000000ULL,
00556         0xa000000ULL,
00557         0x14000000ULL,
00558         0x28000000ULL,
00559         0x50000000ULL,
00560         0xa0000000ULL,
00561         0x40000000ULL,
00562 
00563         0x200000000ULL,
00564         0x500000000ULL,
00565         0xa00000000ULL,
00566         0x1400000000ULL,
00567         0x2800000000ULL,
00568         0x5000000000ULL,
00569         0xa000000000ULL,
00570         0x4000000000ULL,
00571 
00572         0x20000000000ULL,
00573         0x50000000000ULL,
00574         0xa0000000000ULL,
00575         0x140000000000ULL,
00576         0x280000000000ULL,
00577         0x500000000000ULL,
00578         0xa00000000000ULL,
00579         0x400000000000ULL,
00580 
00581         0x2000000000000ULL,
00582         0x5000000000000ULL,
00583         0xa000000000000ULL,
00584         0x14000000000000ULL,
00585         0x28000000000000ULL,
00586         0x50000000000000ULL,
00587         0xa0000000000000ULL,
00588         0x40000000000000ULL,
00589 
00590         0x200000000000000ULL,
00591         0x500000000000000ULL,
00592         0xa00000000000000ULL,
00593         0x1400000000000000ULL,
00594         0x2800000000000000ULL,
00595         0x5000000000000000ULL,
00596         0xa000000000000000ULL,
00597         0x4000000000000000ULL,
00598 
00599         0,0,0,0,0,0,0,0
00600     }
00601 };
00602 
00603 static const u64 PAWN_CAPTURE_MASK[2][64] = { {
00604         0x0000000000000000ULL,
00605         0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL,
00606         0x0000000000000000ULL, 0x0000000000000000ULL, 0x0000000000000000ULL,
00607         0x0000000000000000ULL, 0x0000000000000002ULL, 0x0000000000000005ULL,
00608         0x000000000000000AULL, 0x0000000000000014ULL, 0x0000000000000028ULL,
00609         0x0000000000000050ULL, 0x00000000000000A0ULL, 0x0000000000000040ULL,
00610         0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL,
00611         0x0000000000001400ULL, 0x0000000000002800ULL, 0x0000000000005000ULL,
00612         0x000000000000A000ULL, 0x0000000000004000ULL, 0x0000000000020000ULL,
00613         0x0000000000050000ULL, 0x00000000000A0000ULL, 0x0000000000140000ULL,
00614         0x0000000000280000ULL, 0x0000000000500000ULL, 0x0000000000A00000ULL,
00615         0x0000000000400000ULL, 0x0000000002000000ULL, 0x0000000005000000ULL,
00616         0x000000000A000000ULL, 0x0000000014000000ULL, 0x0000000028000000ULL,
00617         0x0000000050000000ULL, 0x00000000A0000000ULL, 0x0000000040000000ULL,
00618         0x0000000200000000ULL, 0x0000000500000000ULL, 0x0000000A00000000ULL,
00619         0x0000001400000000ULL, 0x0000002800000000ULL, 0x0000005000000000ULL,
00620         0x000000A000000000ULL, 0x0000004000000000ULL, 0x0000020000000000ULL,
00621         0x0000050000000000ULL, 0x00000A0000000000ULL, 0x0000140000000000ULL,
00622         0x0000280000000000ULL, 0x0000500000000000ULL, 0x0000A00000000000ULL,
00623         0x0000400000000000ULL, 0x0002000000000000ULL, 0x0005000000000000ULL,
00624         0x000A000000000000ULL, 0x0014000000000000ULL, 0x0028000000000000ULL,
00625         0x0050000000000000ULL, 0x00A0000000000000ULL, 0x0040000000000000ULL
00626     },
00627     {
00628         0x0000000000000200ULL, 0x0000000000000500ULL, 0x0000000000000A00ULL,
00629         0x0000000000001400ULL, 0x0000000000002800ULL,
00630         0x0000000000005000ULL, 0x000000000000A000ULL,
00631         0x0000000000004000ULL, 0x0000000000020000ULL,
00632         0x0000000000050000ULL, 0x00000000000A0000ULL,
00633         0x0000000000140000ULL, 0x0000000000280000ULL,
00634         0x0000000000500000ULL, 0x0000000000A00000ULL,
00635         0x0000000000400000ULL, 0x0000000002000000ULL,
00636         0x0000000005000000ULL, 0x000000000A000000ULL,
00637         0x0000000014000000ULL, 0x0000000028000000ULL,
00638         0x0000000050000000ULL, 0x00000000A0000000ULL,
00639         0x0000000040000000ULL, 0x0000000200000000ULL,
00640         0x0000000500000000ULL, 0x0000000A00000000ULL,
00641         0x0000001400000000ULL, 0x0000002800000000ULL,
00642         0x0000005000000000ULL, 0x000000A000000000ULL,
00643         0x0000004000000000ULL, 0x0000020000000000ULL,
00644         0x0000050000000000ULL, 0x00000A0000000000ULL,
00645         0x0000140000000000ULL, 0x0000280000000000ULL,
00646         0x0000500000000000ULL, 0x0000A00000000000ULL,
00647         0x0000400000000000ULL, 0x0002000000000000ULL,
00648         0x0005000000000000ULL, 0x000A000000000000ULL,
00649         0x0014000000000000ULL, 0x0028000000000000ULL,
00650         0x0050000000000000ULL, 0x00A0000000000000ULL,
00651         0x0040000000000000ULL, 0x0200000000000000ULL,
00652         0x0500000000000000ULL, 0x0A00000000000000ULL,
00653         0x1400000000000000ULL, 0x2800000000000000ULL,
00654         0x5000000000000000ULL, 0xA000000000000000ULL,
00655         0x4000000000000000ULL, 0x0000000000000000ULL,
00656         0x0000000000000000ULL, 0x0000000000000000ULL,
00657         0x0000000000000000ULL, 0x0000000000000000ULL,
00658         0x0000000000000000ULL, 0x0000000000000000ULL,
00659         0x0000000000000000ULL
00660     }
00661 };
00662 
00663 static const u64 NEAR_MASK1[64] = {
00664     0x0000000000000302ULL, 0x0000000000000705ULL,
00665     0x0000000000000E0AULL, 0x0000000000001C14ULL, 0x0000000000003828ULL,
00666     0x0000000000007050ULL, 0x000000000000E0A0ULL, 0x000000000000C040ULL,
00667     0x0000000000030203ULL, 0x0000000000070507ULL, 0x00000000000E0A0EULL,
00668     0x00000000001C141CULL, 0x0000000000382838ULL, 0x0000000000705070ULL,
00669     0x0000000000E0A0E0ULL, 0x0000000000C040C0ULL, 0x0000000003020300ULL,
00670     0x0000000007050700ULL, 0x000000000E0A0E00ULL, 0x000000001C141C00ULL,
00671     0x0000000038283800ULL, 0x0000000070507000ULL, 0x00000000E0A0E000ULL,
00672     0x00000000C040C000ULL, 0x0000000302030000ULL, 0x0000000705070000ULL,
00673     0x0000000E0A0E0000ULL, 0x0000001C141C0000ULL, 0x0000003828380000ULL,
00674     0x0000007050700000ULL, 0x000000E0A0E00000ULL, 0x000000C040C00000ULL,
00675     0x0000030203000000ULL, 0x0000070507000000ULL, 0x00000E0A0E000000ULL,
00676     0x00001C141C000000ULL, 0x0000382838000000ULL, 0x0000705070000000ULL,
00677     0x0000E0A0E0000000ULL, 0x0000C040C0000000ULL, 0x0003020300000000ULL,
00678     0x0007050700000000ULL, 0x000E0A0E00000000ULL, 0x001C141C00000000ULL,
00679     0x0038283800000000ULL, 0x0070507000000000ULL, 0x00E0A0E000000000ULL,
00680     0x00C040C000000000ULL, 0x0302030000000000ULL, 0x0705070000000000ULL,
00681     0x0E0A0E0000000000ULL, 0x1C141C0000000000ULL, 0x3828380000000000ULL,
00682     0x7050700000000000ULL, 0xE0A0E00000000000ULL, 0xC040C00000000000ULL,
00683     0x0203000000000000ULL, 0x0507000000000000ULL, 0x0A0E000000000000ULL,
00684     0x141C000000000000ULL, 0x2838000000000000ULL, 0x5070000000000000ULL,
00685     0xA0E0000000000000ULL, 0x40C0000000000000ULL
00686 };
00687 
00688 static const u64 NEAR_MASK2[64] = {
00689     0x70706ULL,0xf0f0dULL,0x1f1f1bULL,0x3e3e36ULL,0x7c7c6cULL,0xf8f8d8ULL,0xf0f0b0ULL,0xe0e060ULL,0x7070607ULL,0xf0f0d0fULL,0x1f1f1b1fULL,0x3e3e363eULL,0x7c7c6c7cULL,0xf8f8d8f8ULL,
00690     0xf0f0b0f0ULL,0xe0e060e0ULL,0x707060707ULL,0xf0f0d0f0fULL,0x1f1f1b1f1fULL,0x3e3e363e3eULL,0x7c7c6c7c7cULL,0xf8f8d8f8f8ULL,0xf0f0b0f0f0ULL,0xe0e060e0e0ULL,0x70706070700ULL,
00691     0xf0f0d0f0f00ULL,0x1f1f1b1f1f00ULL,0x3e3e363e3e00ULL,0x7c7c6c7c7c00ULL,0xf8f8d8f8f800ULL,0xf0f0b0f0f000ULL,0xe0e060e0e000ULL,0x7070607070000ULL,0xf0f0d0f0f0000ULL,0x1f1f1b1f1f0000ULL,
00692     0x3e3e363e3e0000ULL,0x7c7c6c7c7c0000ULL,0xf8f8d8f8f80000ULL,0xf0f0b0f0f00000ULL,0xe0e060e0e00000ULL,0x707060707000000ULL,0xf0f0d0f0f000000ULL,0x1f1f1b1f1f000000ULL,
00693     0x3e3e363e3e000000ULL,0x7c7c6c7c7c000000ULL,0xf8f8d8f8f8000000ULL,0xf0f0b0f0f0000000ULL,0xe0e060e0e0000000ULL,0x706070700000000ULL,0xf0d0f0f00000000ULL,0x1f1b1f1f00000000ULL,
00694     0x3e363e3e00000000ULL,0x7c6c7c7c00000000ULL,0xf8d8f8f800000000ULL,0xf0b0f0f000000000ULL,0xe060e0e000000000ULL,0x607070000000000ULL,0xd0f0f0000000000ULL,0x1b1f1f0000000000ULL,
00695     0x363e3e0000000000ULL,0x6c7c7c0000000000ULL,0xd8f8f80000000000ULL,0xb0f0f00000000000ULL,0x60e0e00000000000ULL
00696 };
00697 
00698 static const u64 KNIGHT_MASK[64] = {
00699     0x0000000000020400ULL, 0x0000000000050800ULL,
00700     0x00000000000A1100ULL, 0x0000000000142200ULL, 0x0000000000284400ULL,
00701     0x0000000000508800ULL, 0x0000000000A01000ULL, 0x0000000000402000ULL,
00702     0x0000000002040004ULL, 0x0000000005080008ULL, 0x000000000A110011ULL,
00703     0x0000000014220022ULL, 0x0000000028440044ULL, 0x0000000050880088ULL,
00704     0x00000000A0100010ULL, 0x0000000040200020ULL, 0x0000000204000402ULL,
00705     0x0000000508000805ULL, 0x0000000A1100110AULL, 0x0000001422002214ULL,
00706     0x0000002844004428ULL, 0x0000005088008850ULL, 0x000000A0100010A0ULL,
00707     0x0000004020002040ULL, 0x0000020400040200ULL, 0x0000050800080500ULL,
00708     0x00000A1100110A00ULL, 0x0000142200221400ULL, 0x0000284400442800ULL,
00709     0x0000508800885000ULL, 0x0000A0100010A000ULL, 0x0000402000204000ULL,
00710     0x0002040004020000ULL, 0x0005080008050000ULL, 0x000A1100110A0000ULL,
00711     0x0014220022140000ULL, 0x0028440044280000ULL, 0x0050880088500000ULL,
00712     0x00A0100010A00000ULL, 0x0040200020400000ULL, 0x0204000402000000ULL,
00713     0x0508000805000000ULL, 0x0A1100110A000000ULL, 0x1422002214000000ULL,
00714     0x2844004428000000ULL, 0x5088008850000000ULL, 0xA0100010A0000000ULL,
00715     0x4020002040000000ULL, 0x0400040200000000ULL, 0x0800080500000000ULL,
00716     0x1100110A00000000ULL, 0x2200221400000000ULL, 0x4400442800000000ULL,
00717     0x8800885000000000ULL, 0x100010A000000000ULL, 0x2000204000000000ULL,
00718     0x0004020000000000ULL, 0x0008050000000000ULL, 0x00110A0000000000ULL,
00719     0x0022140000000000ULL, 0x0044280000000000ULL, 0x0088500000000000ULL,
00720     0x0010A00000000000ULL, 0x0020400000000000ULL
00721 };
00722 
00723 static const u64 ENPASSANT_MASK[2][64] = { {
00724         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00725         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00726         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00727         0ULL, 0ULL, 0x200000000ULL, 0x500000000ULL, 0xA00000000ULL,
00728         0x1400000000ULL, 0x2800000000ULL, 0x5000000000ULL, 0xA000000000ULL,
00729         0x4000000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00730         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00731         0ULL, 0ULL, 0
00732     }, {
00733         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00734         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00735         0ULL, 0ULL, 0ULL, 0ULL, 0x2000000ULL, 0x5000000ULL, 0xA000000ULL,
00736         0x14000000ULL, 0x28000000ULL, 0x50000000ULL, 0xA0000000ULL,
00737         0x40000000ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00738         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00739         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00740     }
00741 };
00742 
00743 }
00744 
00745 using namespace _board;
00746 namespace _memory {
00747 #ifdef _WIN32
00748 #include <windows.h>
00749 #else
00750 #include <sys/mman.h>
00751 #endif
00752 void* _mmap(string fileName);
00753 void _munmap(void *blob,int fileSize);
00754 }
00755 
00756 namespace _time {
00757 string getLocalTime();
00758 int diffTime(struct timeb a,struct timeb b);
00759 }
00760 
00761 namespace _string {
00762 void trimRight( string& str  );
00763 void replace(string& f,string s1,string s2);
00764 void replace(string& f,char c1,char c2) ;
00765 }
00766 
00767 namespace _file {
00768 int fileSize(const string& FileName) ;
00769 string extractFileName(string path);
00770 }
00771 
00772 namespace _random {
00773 void init();
00774 u64 getRandom64();
00775 }
00776 
00777 namespace _bits {
00778 extern u64 MASK_BIT_SET[64][64];
00779 extern u64 MASK_BIT_SET_NOBOUND[64][64];
00780 extern char MASK_BIT_SET_COUNT[64][64];
00781 extern char MASK_BIT_SET_NOBOUND_COUNT[64][64];
00782 extern u64** LINK_ROOKS;
00783 void init();
00784 void _free();
00785 
00786 template <int side,int shift> __inline static u64 shiftForward(const u64 bits ) {
00787     return side==WHITE ? bits<<shift : bits>>shift;
00788 }
00789 
00790 #if UINTPTR_MAX == 0xffffffffffffffff
00791 __inline static int BITScanForward(u64 bits) {
00792     return __builtin_ffsll(bits) - 1;
00793 }
00794 
00795 __inline static int BITScanReverse(u64 bits) {
00796     return 63 - __builtin_clzll(bits) ;
00797 }
00798 #else
00799 __inline static int BITScanForward(u64 bits) {
00800     return ((unsigned) bits) ? __builtin_ffs(bits) - 1 : __builtin_ffs(bits >> 32) + 31;
00801 }
00802 
00803 __inline static int BITScanReverse(u64 bits) {
00804     return ((unsigned) (bits >> 32))? 63-__builtin_clz(bits >> 32) : 31-__builtin_clz(bits) ;
00805 }
00806 #endif
00807 
00808 #ifdef HAS_POPCNT
00809 __inline static int bitCount(u64 bits) {
00810     return __builtin_popcountll(bits);
00811 }
00812 #else
00813 __inline static int bitCount(u64 bits) {
00814     int count = 0;
00815     while (bits) {
00816         count++;
00817         bits &= bits - 1;
00818     }
00819     return count;
00820 }
00821 #endif
00822 
00823 }
00824 
00825 
00826 namespace _eval {
00827 
00828 static const int VALUEPAWN = 100;
00829 static const int VALUEROOK = 520;
00830 static const int VALUEBISHOP = 335;
00831 static const int VALUEKNIGHT = 330;
00832 static const int VALUEQUEEN = 980;
00833 static const int VALUEKING =_INFINITE;
00834 
00835 static const int PIECES_VALUE[] = {
00836     VALUEPAWN, VALUEPAWN, VALUEROOK, VALUEROOK,
00837     VALUEBISHOP, VALUEBISHOP, VALUEKNIGHT, VALUEKNIGHT, VALUEKING,
00838     VALUEKING, VALUEQUEEN, VALUEQUEEN, 0
00839 };
00840 
00841 enum _Tstatus {
00842     OPEN, MIDDLE, END
00843 };
00844 
00845 static const int MOB_QUEEN[][29] = {
00846     {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
00847     {-10,-9,-5,0,3,6,7,10,11,12,15,18,28,30,32,35,40,50,51,52,53,54,55,56,57,58,59,60,61},
00848     {-20,-15,-10,0,1,3,4,9,11,12,15,18,28,30,32,33,34,36,37,39,40,41,42,43,44,45,56,47,48}
00849 };
00850 
00851 static const int MOB_ROOK[][15] = {
00852     {-1,0,1,4,5,6,7,9,12,14,19,22,23,24,25},
00853     {-9,-8,1,8,9,10,15,20,28,30,40,45,50,51,52},
00854     {-15,-10,-5,0,9,11,16,22,30,32,40,45,50,51,52}
00855 };
00856 
00857 static const int MOB_KNIGHT[] = {-8,-4,7,10,15,20,30,35,40};
00858 static const int MOB_BISHOP[] = {-8,-7,2,8,9,10,15,20,28,30,40,45,50,50,50};
00859 
00860 static const int MOB_KING[][9] = {
00861     {1,2,2,1,0,0,0,0,0},
00862     {-5,0,5,5,5,0,0,0,0},
00863     {-50,-30,-10,10,25,40,50,55,60}
00864 };
00865 
00866 static const int MOB_CASTLE[][3] = {
00867     {-50,30,50},
00868     {-1,10,10},
00869     {0,0,0}
00870 };
00871 
00872 static const int MOB_PAWNS[] = {-1,2,3,4,5,10,12,14,18,22,25,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,70,75,80,90,95,100,110};
00873 
00874 static const int BONUS_ATTACK_KING[] = { -1, 2, 8, 64, 128, 512,512,512,512,512,512,512,512,512,512,512,512,512 };
00875 
00876 static const u64 PAWN_PROTECTED_MASK[2][64] = { {
00877         0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL,
00878         0x2800ULL, 0x5000ULL, 0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL,
00879         0xa0000ULL, 0x140000ULL, 0x280000ULL, 0x500000ULL, 0xa00000ULL,
00880         0x400000ULL, 0x2000000ULL, 0x5000000ULL, 0xa000000ULL, 0x14000000ULL,
00881         0x28000000ULL, 0x50000000ULL, 0xa0000000ULL, 0x40000000ULL,
00882         0x200000000ULL, 0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL,
00883         0x2800000000ULL, 0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL,
00884         0x20000000000ULL, 0x50000000000ULL, 0xa0000000000ULL,
00885         0x140000000000ULL, 0x280000000000ULL, 0x500000000000ULL,
00886         0xa00000000000ULL, 0x400000000000ULL, 0x2000000000000ULL,
00887         0x5000000000000ULL, 0xa000000000000ULL, 0x14000000000000ULL,
00888         0x28000000000000ULL, 0x50000000000000ULL, 0xa0000000000000ULL,
00889         0x40000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL,
00890         0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL,
00891         0xFF000000000000ULL, 0xFF000000000000ULL, 0xFF000000000000ULL, 0, 0, 0,
00892         0, 0, 0, 0, 0
00893     }, {
00894         0, 0, 0, 0, 0, 0, 0, 0, 0xFF00ULL, 0xFF00ULL,
00895         0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL, 0xFF00ULL,
00896         0x200ULL, 0x500ULL, 0xa00ULL, 0x1400ULL, 0x2800ULL, 0x5000ULL,
00897         0xa000ULL, 0x4000ULL, 0x20000ULL, 0x50000ULL, 0xa0000ULL, 0x140000ULL,
00898         0x280000ULL, 0x500000ULL, 0xa00000ULL, 0x400000ULL, 0x2000000ULL,
00899         0x5000000ULL, 0xa000000ULL, 0x14000000ULL, 0x28000000ULL,
00900         0x50000000ULL, 0xa0000000ULL, 0x40000000ULL, 0x200000000ULL,
00901         0x500000000ULL, 0xa00000000ULL, 0x1400000000ULL, 0x2800000000ULL,
00902         0x5000000000ULL, 0xa000000000ULL, 0x4000000000ULL, 0x20000000000ULL,
00903         0x50000000000ULL, 0xa0000000000ULL, 0x140000000000ULL,
00904         0x280000000000ULL, 0x500000000000ULL, 0xa00000000000ULL,
00905         0x400000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL,
00906         0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL,
00907         0xFF00000000000000ULL, 0xFF00000000000000ULL, 0xFF00000000000000ULL
00908     }
00909 };
00910 
00911 static const u64 PAWN_BACKWARD_MASK[2][64] = { {
00912         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00913         0ULL, 131584ULL, 328960ULL, 657920ULL, 1315840ULL, 2631680ULL,
00914         5263360ULL, 10526720ULL, 4210688ULL, 33685504ULL, 84213760ULL,
00915         168427520ULL, 336855040ULL, 673710080ULL, 1347420160ULL, 2694840320ULL,
00916         1077936128ULL, 8623489024ULL, 21558722560ULL, 43117445120ULL,
00917         86234890240ULL, 172469780480ULL, 344939560960ULL, 689879121920ULL,
00918         275951648768ULL, 2207613190144ULL, 5519032975360ULL, 11038065950720ULL,
00919         22076131901440ULL, 44152263802880ULL, 88304527605760ULL,
00920         176609055211520ULL, 70643622084608ULL, 565148976676864ULL,
00921         1412872441692160ULL, 2825744883384320ULL, 5651489766768640ULL,
00922         11302979533537280ULL, 22605959067074560ULL, 45211918134149120ULL,
00923         18084767253659648ULL, 562949953421312ULL, 1407374883553280ULL,
00924         2814749767106560ULL, 5629499534213120ULL, 11258999068426240ULL,
00925         22517998136852480ULL, 45035996273704960ULL, 18014398509481984ULL, 0ULL,
00926         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00927     }, {
00928         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL,
00929         512ULL, 1280ULL, 2560ULL, 5120ULL, 10240ULL,20480ULL, 40960ULL, 16384ULL,
00930         131584ULL, 328960ULL, 657920ULL,1315840ULL, 2631680ULL, 5263360ULL, 10526720ULL, 4210688ULL,
00931         33685504ULL, 84213760ULL, 168427520ULL, 336855040ULL, 673710080ULL,     1347420160ULL, 2694840320ULL, 1077936128ULL,
00932         8623489024ULL,21558722560ULL, 43117445120ULL, 86234890240ULL, 172469780480ULL,
00933         344939560960ULL, 689879121920ULL, 275951648768ULL, 2207613190144ULL,
00934         5519032975360ULL, 11038065950720ULL, 22076131901440ULL,
00935         44152263802880ULL, 88304527605760ULL, 176609055211520ULL,
00936         70643622084608ULL, 565148976676864ULL, 1412872441692160ULL,
00937         2825744883384320ULL, 5651489766768640ULL, 11302979533537280ULL,
00938         22605959067074560ULL, 45211918134149120ULL, 18084767253659648ULL, 0ULL,
00939         0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0ULL, 0
00940     }
00941 };
00942 
00943 static const u64 PAWN_PASSED_MASK[2][64] = { {
00944         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00945         0x0ULL, 0x0ULL, 0x0ULL, 0x3ULL, 0x7ULL, 0xeULL, 0x1cULL, 0x38ULL,
00946         0x70ULL, 0xe0ULL, 0xc0ULL, 0x303ULL, 0x707ULL, 0xe0eULL, 0x1c1cULL,
00947         0x3838ULL, 0x7070ULL, 0xe0e0ULL, 0xc0c0ULL, 0x30303ULL, 0x70707ULL,
00948         0xe0e0eULL, 0x1c1c1cULL, 0x383838ULL, 0x707070ULL, 0xe0e0e0ULL,
00949         0xc0c0c0ULL, 0x3030303ULL, 0x7070707ULL, 0xe0e0e0eULL, 0x1c1c1c1cULL,
00950         0x38383838ULL, 0x70707070ULL, 0xe0e0e0e0ULL, 0xc0c0c0c0ULL,
00951         0x303030303ULL, 0x707070707ULL, 0xe0e0e0e0eULL, 0x1c1c1c1c1cULL,
00952         0x3838383838ULL, 0x7070707070ULL, 0xe0e0e0e0e0ULL, 0xc0c0c0c0c0ULL,
00953         0x30303030303ULL, 0x70707070707ULL, 0xe0e0e0e0e0eULL,
00954         0x1c1c1c1c1c1cULL, 0x383838383838ULL, 0x707070707070ULL,
00955         0xe0e0e0e0e0e0ULL, 0xc0c0c0c0c0c0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00956         0x0ULL, 0x0ULL, 0x0ULL, 0x0
00957     }, {
00958         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00959         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x303030303030000ULL,
00960         0x707070707070000ULL, 0xe0e0e0e0e0e0000ULL, 0x1c1c1c1c1c1c0000ULL,
00961         0x3838383838380000ULL, 0x7070707070700000ULL, 0xe0e0e0e0e0e00000ULL,
00962         0xc0c0c0c0c0c00000ULL, 0x303030303000000ULL, 0x707070707000000ULL,
00963         0xe0e0e0e0e000000ULL, 0x1c1c1c1c1c000000ULL, 0x3838383838000000ULL,
00964         0x7070707070000000ULL, 0xe0e0e0e0e0000000ULL, 0xc0c0c0c0c0000000ULL,
00965         0x303030300000000ULL, 0x707070700000000ULL, 0xe0e0e0e00000000ULL,
00966         0x1c1c1c1c00000000ULL, 0x3838383800000000ULL, 0x7070707000000000ULL,
00967         0xe0e0e0e000000000ULL, 0xc0c0c0c000000000ULL, 0x303030000000000ULL,
00968         0x707070000000000ULL, 0xe0e0e0000000000ULL, 0x1c1c1c0000000000ULL,
00969         0x3838380000000000ULL, 0x7070700000000000ULL, 0xe0e0e00000000000ULL,
00970         0xc0c0c00000000000ULL, 0x303000000000000ULL, 0x707000000000000ULL,
00971         0xe0e000000000000ULL, 0x1c1c000000000000ULL, 0x3838000000000000ULL,
00972         0x7070000000000000ULL, 0xe0e0000000000000ULL, 0xc0c0000000000000ULL,
00973         0x300000000000000ULL, 0x700000000000000ULL, 0xe00000000000000ULL,
00974         0x1c00000000000000ULL, 0x3800000000000000ULL, 0x7000000000000000ULL,
00975         0xe000000000000000ULL, 0xc000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL,
00976         0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0
00977     }
00978 };
00979 
00980 static const uchar PAWN_PASSED[2][64] = { {
00981         200, 200, 200, 200, 200, 200, 200, 200,
00982         100, 100, 100, 100, 100, 100, 100, 100,
00983         40, 40, 40, 40, 40, 40, 40, 40,
00984         19, 19, 19, 21, 21, 19, 19, 19,
00985         13, 13, 13, 25, 25, 13, 13, 13,
00986         0, 0, 0, 0, 0, 0, 0, 0,
00987         0, 0, 0, 0, 0, 0, 0, 0,
00988         0, 0, 0, 0, 0, 0, 0, 0
00989     }, {
00990         0, 0, 0, 0, 0, 0, 0, 0,
00991         0, 0, 0, 0, 0, 0, 0, 0,
00992         0, 0, 0, 0, 0, 0, 0, 0,
00993         13, 13, 13, 25, 25, 13, 13, 13,
00994         19, 19, 19, 21, 21, 19, 19, 19,
00995         40, 40, 40, 40, 40, 40, 40, 40,
00996         100, 100, 100, 100, 100, 100, 100, 100,
00997         200, 200, 200, 200, 200, 200, 200, 200
00998     }
00999 };
01000 
01001 static const u64 PAWN_ISOLATED_MASK[64] = {
01002     0x202020202020202ULL, 0x505050505050505ULL,
01003     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
01004     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
01005     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
01006     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
01007     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL,
01008     0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL,
01009     0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL,
01010     0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL,
01011     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
01012     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
01013     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
01014     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
01015     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL, 0x202020202020202ULL,
01016     0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL,
01017     0x2828282828282828ULL, 0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL,
01018     0x4040404040404040ULL, 0x202020202020202ULL, 0x505050505050505ULL,
01019     0xA0A0A0A0A0A0A0AULL, 0x1414141414141414ULL, 0x2828282828282828ULL,
01020     0x5050505050505050ULL, 0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL,
01021     0x202020202020202ULL, 0x505050505050505ULL, 0xA0A0A0A0A0A0A0AULL,
01022     0x1414141414141414ULL, 0x2828282828282828ULL, 0x5050505050505050ULL,
01023     0xA0A0A0A0A0A0A0A0ULL, 0x4040404040404040ULL
01024 };
01025 
01026 static const char DISTANCE_KING_OPENING[64] = {
01027     -8, -8, -8, -8, -8, -8, -8, -8,
01028     -8, -8, -8, -8, -8, -8, -8, -8,
01029     -8, -8, -12, -12, -12, -12, -8, -8,
01030     -8, -8, -12, -16, -16, -12, -8, -8,
01031     -8, -8, -12, -16, -16, -12, -8, -8,
01032     -8, -8, -12, -12, -12, -12, -8, -8,
01033     -8, -8, -8, -8, -8, -8, -8, -8,
01034     -8, -8, -8, -8, -8, -8, -8, -8
01035 };
01036 
01037 static const char DISTANCE_KING_ENDING[64] = {
01038     12, 12, 12, 12, 12, 12, 12, 12,
01039     12, 12, 12, 12, 12, 12, 12, 12,
01040     12, 12, 16, 16, 16, 16, 12, 12,
01041     12, 12, 16, 20, 20, 16, 12, 12,
01042     12, 12, 16, 20, 20, 16, 12, 12,
01043     12, 12, 16, 16, 16, 16, 12, 12,
01044     12, 12, 12, 12, 12, 12, 12, 12,
01045     12, 12, 12, 12, 12, 12, 12, 12
01046 };
01047 
01048 }
01049 
01050 #endif
01051 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines