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