From: H.G.Muller Date: Wed, 5 Mar 2014 09:45:19 +0000 (+0100) Subject: Make piece-type testable by bitmask X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=d00d0b5433bd7df1ca36a02d2707a01be9bda04f;p=gnushogi.git Make piece-type testable by bitmask This allows faster testing if a given piece belongs to a group of types. --- diff --git a/gnushogi/genmove.c b/gnushogi/genmove.c index 208966d..a2c1c09 100644 --- a/gnushogi/genmove.c +++ b/gnushogi/genmove.c @@ -323,21 +323,7 @@ PromotionPossible(short color, short f, short t, short p) return false; } - /* FIXME: this can be simplified... */ - switch (p) - { - case pawn: -#ifndef MINISHOGI - case lance: - case knight: -#endif - case silver: - case bishop: - case rook: - return true; - }; - - return false; + return (typeMask[p] & (T_PAWN|T_LANCE|T_KNIGHT|T_SILVER|T_BISHOP|T_ROOK)) != 0; } @@ -538,10 +524,7 @@ field_bonus(short side, short piece, /* CHECKME: is this right? */ if (((rvupiece == rvuboard) && (upiece == pawn)) - || (upiece == bishop) -#ifndef MINISHOGI - || (upiece == knight) -#endif + || typeMask[upiece] & (T_BISHOP | T_KNIGHT) ) { s++; /* The opposing pawn (piece) */ @@ -781,11 +764,7 @@ LinkMove(short ply, short f, { #ifdef TESUJIBONUS /* Look at non-promoting silver or knight */ - if (piece == silver -#ifndef MINISHOGI - || piece == knight -#endif - ) + if (typeMask[piece] & (T_SILVER | T_KNIGHT)) { local_flag |= tesuji; /* Non-promotion */ s++; @@ -1127,11 +1106,7 @@ LinkPreventCheckDrops(short side, short xside, short ply) for (piece = pawn+1; piece <= rook; piece++) { - if ( -#ifndef MINISHOGI - piece == lance || -#endif - piece == bishop || piece == rook) + if (typeMask[piece] & (T_LANCE | T_BISHOP | T_ROOK)) { /* check for threat of xside piece */ ptyp = ptype[side][piece]; diff --git a/gnushogi/gnushogi.h b/gnushogi/gnushogi.h index d40c3ac..c993804 100644 --- a/gnushogi/gnushogi.h +++ b/gnushogi/gnushogi.h @@ -281,6 +281,33 @@ enum { king }; +/* piece mask defines */ +enum { + T_PAWN = 1<