1 /* 2 * Copyright (C) 1999-2006 3 * Michael Maurer <mjmaurer@yahoo.com> 4 * Brian Goetz <brian@quiotix.com> 5 * Loic Dachary <loic@dachary.org> 6 * 7 * This program gives you software freedom; you can copy, convey, 8 * propagate, redistribute and/or modify this program under the terms of 9 * the GNU General Public License (GPL) as published by the Free Software 10 * Foundation (FSF), either version 3 of the License, or (at your option) 11 * any later version of the GPL published by the FSF. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License along 19 * with this program in a file in the toplevel directory called "GPLv3". 20 * If not, see <http://www.gnu.org/licenses/>. 21 */ 22 /* 23 Note that this file has two #if .. #endif sections -- one for 24 StdDeck macros to prevent double-inclusion, and one to define the 25 generic Deck_ macros if DECK_ASTUD is defined 26 */ 27 28 #ifndef __DECK_ASTUD_H__ 29 #define __DECK_ASTUD_H__ 30 31 #include "pokereval_export.h" 32 33 /* MUST be lower than STRING_CARDS from lib/deck.c */ 34 #define AStudDeck_N_CARDS 32 35 #define AStudDeck_MASK(index) (AStudDeck_cardMasksTable[index]) 36 37 #define AStudDeck_Rank_7 StdDeck_Rank_7 38 #define AStudDeck_Rank_8 StdDeck_Rank_8 39 #define AStudDeck_Rank_9 StdDeck_Rank_9 40 #define AStudDeck_Rank_TEN StdDeck_Rank_TEN 41 #define AStudDeck_Rank_JACK StdDeck_Rank_JACK 42 #define AStudDeck_Rank_QUEEN StdDeck_Rank_QUEEN 43 #define AStudDeck_Rank_KING StdDeck_Rank_KING 44 #define AStudDeck_Rank_ACE StdDeck_Rank_ACE 45 #define AStudDeck_Rank_FIRST AStudDeck_Rank_7 46 #define AStudDeck_Rank_LAST AStudDeck_Rank_ACE 47 #define AStudDeck_Rank_COUNT 8 48 #define AStudDeck_N_RANKMASKS (1 << AStudDeck_Rank_COUNT) 49 50 #define AStudDeck_RANK(index) (AStudDeck_Rank_FIRST \ 51 + ((index) % AStudDeck_Rank_COUNT)) 52 #define AStudDeck_SUIT(index) ((index) / AStudDeck_Rank_COUNT) 53 #define AStudDeck_MAKE_CARD(rank, suit) ((suit * AStudDeck_Rank_COUNT) \ 54 + ( rank - AStudDeck_Rank_FIRST )) 55 56 #define AStudDeck_Suit_HEARTS StdDeck_Suit_HEARTS 57 #define AStudDeck_Suit_DIAMONDS StdDeck_Suit_DIAMONDS 58 #define AStudDeck_Suit_CLUBS StdDeck_Suit_CLUBS 59 #define AStudDeck_Suit_SPADES StdDeck_Suit_SPADES 60 #define AStudDeck_Suit_FIRST AStudDeck_Suit_HEARTS 61 #define AStudDeck_Suit_LAST AStudDeck_Suit_SPADES 62 #define AStudDeck_Suit_COUNT 4 63 64 typedef StdDeck_RankMask AStudDeck_RankMask; 65 66 #define AStudDeck_CardMask StdDeck_CardMask 67 #define AStudDeck_CardMask_SPADES StdDeck_CardMask_SPADES 68 #define AStudDeck_CardMask_CLUBS StdDeck_CardMask_CLUBS 69 #define AStudDeck_CardMask_DIAMONDS StdDeck_CardMask_DIAMONDS 70 #define AStudDeck_CardMask_HEARTS StdDeck_CardMask_HEARTS 71 72 #define AStudDeck_CardMask_NOT StdDeck_CardMask_NOT 73 #define AStudDeck_CardMask_OR StdDeck_CardMask_OR 74 #define AStudDeck_CardMask_AND StdDeck_CardMask_AND 75 #define AStudDeck_CardMask_XOR StdDeck_CardMask_XOR 76 #define AStudDeck_CardMask_ANY_SET StdDeck_CardMask_ANY_SET 77 #define AStudDeck_CardMask_RESET StdDeck_CardMask_RESET 78 #define AStudDeck_CardMask_UNSET StdDeck_CardMask_UNSET 79 #define AStudDeck_CardMask_IS_EMPTY StdDeck_CardMask_IS_EMPTY 80 81 #ifdef USE_INT64 82 #define AStudDeck_CardMask_CARD_IS_SET(mask, index) \ 83 (( (mask).cards_n & (AStudDeck_MASK(index).cards_n)) != 0 ) 84 #else 85 #define AStudDeck_CardMask_CARD_IS_SET(mask, index) \ 86 ((( (mask).cards_nn.n1 & (AStudDeck_MASK(index).cards_nn.n1)) != 0 ) \ 87 || (( (mask).cards_nn.n2 & (AStudDeck_MASK(index).cards_nn.n2)) != 0 )) 88 #endif 89 90 #define AStudDeck_CardMask_SET(mask, index) \ 91 do { \ 92 AStudDeck_CardMask _t1 = AStudDeck_MASK(index); \ 93 AStudDeck_CardMask_OR((mask), (mask), _t1); \ 94 } while (0) 95 96 extern POKEREVAL_EXPORT AStudDeck_CardMask AStudDeck_cardMasksTable[AStudDeck_N_CARDS]; 97 98 extern POKEREVAL_EXPORT const char AStudDeck_rankChars[AStudDeck_Rank_LAST+1]; 99 extern POKEREVAL_EXPORT const char AStudDeck_suitChars[AStudDeck_Suit_LAST+1]; 100 101 extern POKEREVAL_EXPORT int AStudDeck_cardToString(int cardIndex, char *outString); 102 extern POKEREVAL_EXPORT int AStudDeck_stringToCard(char *inString, int *outCard); 103 104 #define AStudDeck_cardString(i) GenericDeck_cardString(&AStudDeck, (i)) 105 #define AStudDeck_printCard(i) GenericDeck_printCard(&AStudDeck, (i)) 106 #define AStudDeck_printMask(m) GenericDeck_printMask(&AStudDeck, ((void *) &(m))) 107 #define AStudDeck_maskString(m) GenericDeck_maskString(&AStudDeck, ((void *) &(m))) 108 #define AStudDeck_numCards(m) GenericDeck_numCards(&AStudDeck, ((void *) &(m))) 109 #define AStudDeck_maskToString(m, s) GenericDeck_maskToString(&AStudDeck, ((void *) &(m)), (s)) 110 111 extern POKEREVAL_EXPORT Deck AStudDeck; 112 113 #endif 114 115 116 117 #ifdef DECK_ASTUD 118 119 #if defined(Deck_N_CARDS) 120 #include "deck_undef.h" 121 #endif 122 123 #define Deck_N_CARDS AStudDeck_N_CARDS 124 #define Deck_MASK AStudDeck_MASK 125 #define Deck_RANK AStudDeck_RANK 126 #define Deck_SUIT AStudDeck_SUIT 127 128 #define Rank_7 AStudDeck_Rank_7 129 #define Rank_8 AStudDeck_Rank_8 130 #define Rank_9 AStudDeck_Rank_9 131 #define Rank_TEN AStudDeck_Rank_TEN 132 #define Rank_JACK AStudDeck_Rank_JACK 133 #define Rank_QUEEN AStudDeck_Rank_QUEEN 134 #define Rank_KING AStudDeck_Rank_KING 135 #define Rank_ACE AStudDeck_Rank_ACE 136 #define Rank_FIRST AStudDeck_Rank_FIRST 137 #define Rank_COUNT AStudDeck_Rank_COUNT 138 139 #define Suit_HEARTS AStudDeck_Suit_HEARTS 140 #define Suit_DIAMONDS AStudDeck_Suit_DIAMONDS 141 #define Suit_CLUBS AStudDeck_Suit_CLUBS 142 #define Suit_SPADES AStudDeck_Suit_SPADES 143 #define Suit_FIRST AStudDeck_Suit_FIRST 144 #define Suit_COUNT AStudDeck_Suit_COUNT 145 146 #define CardMask AStudDeck_CardMask 147 #define CardMask_NOT AStudDeck_CardMask_NOT 148 #define CardMask_OR AStudDeck_CardMask_OR 149 #define CardMask_XOR AStudDeck_CardMask_XOR 150 #define CardMask_AND AStudDeck_CardMask_AND 151 #define CardMask_SET AStudDeck_CardMask_SET 152 #define CardMask_CARD_IS_SET AStudDeck_CardMask_CARD_IS_SET 153 #define CardMask_ANY_SET AStudDeck_CardMask_ANY_SET 154 #define CardMask_RESET AStudDeck_CardMask_RESET 155 #define CardMask_UNSET AStudDeck_CardMask_UNSET 156 157 #define CardMask_SPADES AStudDeck_CardMask_SPADES 158 #define CardMask_HEARTS AStudDeck_CardMask_HEARTS 159 #define CardMask_CLUBS AStudDeck_CardMask_CLUBS 160 #define CardMask_DIAMONDS AStudDeck_CardMask_DIAMONDS 161 162 #define CurDeck AStudDeck 163 164 #endif /* DECK_ASTUD */ 165 166