#ifndef __TYPES_H_INC #define __TYPES_H_INC enum Piece: byte { P_EMPTY = 0b0000, P_ANY = 0b1000, W_PAWN = 0b0001, W_KNGT = 0b0010, W_KING = 0b0011, W_BSHP = 0b0101, W_ROOK = 0b0110, W_QUEN = 0b0111, B_PAWN = 0b1001, B_KNGT = 0b1010, B_KING = 0b1011, B_BSHP = 0b1101, B_ROOK = 0b1110, B_QUEN = 0b1111, }; #ifdef _ACF_FAST_PIECE Piece char_to_piece(char c) { switch(c) { case 'p': return W_PAWN; case 'n': return W_KNGT; case 'k': return W_KING; case 'b': return W_BSHP; case 'r': return W_ROOK; case 'q': return W_QUEN; case 'P': return B_PAWN; case 'N': return B_KNGT; case 'K': return B_KING; case 'B': return B_BSHP; case 'R': return B_ROOK; case 'Q': return B_QUEN; default: return P_EMPTY; } } #else // _ACF_FAST_PIECE const char CHAR_STRS[] PROGMEM = " pnkbrq PNKBRQ"; Piece char_to_piece(char c) { for(byte i = 0; i < 0b1111; i++) { if(pgm_read_byte_near(CHAR_STRS + i) == c) return (Piece)i; } return P_EMPTY; } char piece_to_char(Piece p) { return CHAR_STRS[p]; } #endif // _ACF_FAST_PIECE #endif