Incorporate variant type in book hash key
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 8 Oct 2011 18:43:52 +0000 (20:43 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sun, 23 Oct 2011 14:18:49 +0000 (16:18 +0200)
This prevents booksforone variant being used for another, and allows
multi-variant books.

book.c

diff --git a/book.c b/book.c
index 6b1198d..a5aa6ab 100644 (file)
--- a/book.c
+++ b/book.c
@@ -278,6 +278,23 @@ uint64 hash(int moveNr)
 {
     int r, f, p_enc, squareNr, pieceGroup;
     uint64 key=0, holdingsKey=0, Zobrist;
+    VariantClass v = gameInfo.variant;
+
+    switch(v) {
+       case VariantNormal:
+       case VariantFischeRandom: // compatible with normal
+       case VariantNoCastle:
+       case VariantXiangqi: // for historic reasons; does never collide anyway because of other King type
+           break;
+       case VariantGiveaway: // in opening same as suicide
+           key += VariantSuicide;
+           break;
+       case VariantGothic: // these are special cases of CRC, and can share book
+       case VariantCapablanca:
+           v = VariantCapaRandom;
+       default:
+           key += v; // variant type incorporated in key to allow mixed books without collisions
+    }
 
     for(f=0; f<BOARD_WIDTH; f++){
         for(r=0; r<BOARD_HEIGHT;r++){