void hashdata_invert_stone(Hash_data *hd, int pos, int color) { if (color == BLACK) hashdata_xor(*hd, black_hash[pos]); else if (color == WHITE) hashdata_xor(*hd, white_hash[pos]); }
static void calculate_hashval_for_tt(Hash_data *hashdata, int routine, int target1, int target2, Hash_data *extra_hash) { *hashdata = board_hash; /* from globals.c */ hashdata_xor(*hashdata, routine_hash[routine]); hashdata_xor(*hashdata, target1_hash[target1]); if (target2 != NO_MOVE) hashdata_xor(*hashdata, target2_hash[target2]); if (extra_hash) hashdata_xor(*hashdata, *extra_hash); }
void hashdata_recalc(Hash_data *target, Intersection *p, int ko_pos) { int pos; int i; for (i = 0; i < NUM_HASHVALUES; i++) target->hashval[i] = 0; for (pos = BOARDMIN; pos < BOARDMAX; pos++) { if (p[pos] == WHITE) hashdata_xor(*target, white_hash[pos]); else if (p[pos] == BLACK) hashdata_xor(*target, black_hash[pos]); } if (ko_pos != 0) hashdata_xor(*target, ko_hash[ko_pos]); }
void hashdata_invert_ko(Hash_data *hd, int pos) { hashdata_xor(*hd, ko_hash[pos]); }