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 #ifndef __DECK_H__ 23 #define __DECK_H__ 24 25 #include "pokereval_export.h" 26 27 typedef int Deck_cardToStringFn(int cardIndex, char *outString); 28 typedef int Deck_maskToCardsFn(void *cardMask, int cardIndices[]); 29 typedef int Deck_stringToCardFn(char *inString, int *index); 30 typedef int Deck_numCardsFn(void *cardMask); 31 32 typedef struct { 33 int nCards; 34 char * name; 35 Deck_cardToStringFn *cardToString; 36 Deck_stringToCardFn *stringToCard; 37 Deck_maskToCardsFn *maskToCards; 38 Deck_numCardsFn *numCards; 39 } Deck; 40 41 #define Deck_cardToString (CurDeck.cardToString) 42 #define Deck_stringToCard (CurDeck.stringToCard) 43 #define Deck_cardString(i) GenericDeck_cardString(&(CurDeck), (i)) 44 #define Deck_printCard(i) GenericDeck_printCard(&(CurDeck), (i)) 45 46 #define Deck_printMask(m) \ 47 GenericDeck_printMask(&CurDeck, ((void *) &(m))) 48 49 #define Deck_maskString(m) \ 50 GenericDeck_maskString(&CurDeck, ((void *) &(m))) 51 52 #define Deck_numCards(m) \ 53 GenericDeck_numCards(&CurDeck, ((void *) &(m))) 54 55 #define Deck_maskToString(m, s) \ 56 GenericDeck_maskToString(&CurDeck, ((void *) &(m)), (s)) 57 58 /* As an alternative to the CurDeck approach, provide another set of macros 59 that accept an object of type Deck as an argument. */ 60 #define DcardToString(d, c, s) ((d).cardToString((c), (s))) 61 #define DstringToCard(d, s, i) ((d).stringToCard((s), (i))) 62 #define DcardString(d, i) (GenericDeck_cardString(&(d), (i))) 63 #define DprintCard(d, i) (GenericDeck_printCard(&(d), (i))) 64 #define DprintMask(d, m) (GenericDeck_printMask(&(d), ((void *) &(m)))) 65 #define DmaskString(d, m) (GenericDeck_maskString(&(d), ((void *) &(m)))) 66 #define DnumCards(d, m) (GenericDeck_numCards(&(d), ((void *) &(m)))) 67 #define DmaskToString(d, m, s) (GenericDeck_maskString(&(d), ((void *) &(m)), (s))) 68 69 extern POKEREVAL_EXPORT char * 70 GenericDeck_cardString(Deck *deck, int cardIndex); 71 extern POKEREVAL_EXPORT int 72 GenericDeck_printMask(Deck *deck, void *cardMask); 73 extern POKEREVAL_EXPORT int 74 GenericDeck_maskToString(Deck *deck, void *cardMask, char *outString); 75 extern POKEREVAL_EXPORT char * 76 GenericDeck_maskString(Deck *deck, void *cardMask); 77 extern POKEREVAL_EXPORT int 78 GenericDeck_printCard(Deck *deck, int cardIndex); 79 extern POKEREVAL_EXPORT int 80 GenericDeck_numCards(Deck *deck, void *cardMask); 81 82 /* These are required by the ENUMERATE_ macros */ 83 84 #define Deck_CardMask CardMask 85 #define Deck_CardMask_OR CardMask_OR 86 #define Deck_CardMask_XOR CardMask_XOR 87 #define Deck_CardMask_AND CardMask_AND 88 #define Deck_CardMask_RESET CardMask_RESET 89 #define Deck_CardMask_ANY_SET CardMask_ANY_SET 90 #define Deck_CardMask_CARD_IS_SET CardMask_CARD_IS_SET 91 92 #endif 93 94