Author: Dann Corbit
Date: 19:35:03 03/22/99
/* ** Why not just do something like this? ** How are bitboards faster? */ #include <assert.h> typedef struct tag_bitboard { char rows[8]; } bitboard; void SetSquare (bitboard * b, int row, int col) { #ifdef UNIT_TEST assert (b); assert (row >= 0 && row <= 7); assert (col >= 0 && col <= 7); #endif b->rows[row] |= (1 << col); } void FlipSquare (bitboard * b, int row, int col) { #ifdef UNIT_TEST assert (b); assert (row >= 0 && row <= 7); assert (col >= 0 && col <= 7); #endif b->rows[row] ^= (1 << col); } void ClearSquare (bitboard * b, int row, int col) { #ifdef UNIT_TEST assert (b); assert (row >= 0 && row <= 7); assert (col >= 0 && col <= 7); #endif b->rows[row] &= ~(1 << col); } int GetSquare (bitboard b, int row, int col) { #ifdef UNIT_TEST assert (row >= 0 && row <= 7); assert (col >= 0 && col <= 7); #endif return (b.rows[row] >> (col) & 1); } #ifdef UNIT_TEST #include <stdio.h> void ShowBoard (bitboard b) { int i; int j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) if (GetSquare (b, i, j)) putchar ('*'); else putchar ('.'); putchar ('\n'); } putchar ('\n'); } #endif #ifdef UNIT_TEST int main (void) { bitboard bb = {0}; bitboard z = bb; int i; for (i = 0; i < 8; i++) SetSquare (&bb, i, i); ShowBoard (bb); bb = z; for (i = 0; i < 8; i++) SetSquare (&bb, i, 0); ShowBoard (bb); bb = z; for (i = 0; i < 8; i++) SetSquare (&bb, 0, i); ShowBoard (bb); return 0; } #endif
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.