summaryrefslogtreecommitdiff
path: root/board.h
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2015-09-07 17:23:14 -0500
committerJohn Fultz <jfultz@wolfram.com>2015-09-07 17:23:14 -0500
commited46987403dd923d3ba14df6eb676e1e163d1d8d (patch)
tree08fa8b962ca037f2ecf05b722097e1719c41d173 /board.h
parent5350a57f1be22b28914fca14225c73dac5b30b24 (diff)
Fix another alphabet length limitation
The 'crosses' code for checking "fit between" plays was using a 32-bit integer as a bitfield. Now it's using C++ bitfields (including the C++11 all() operation...hopefully that doesn't cause any problems). This removes another place in the code that was limiting alphabets to 32 letters.
Diffstat (limited to 'board.h')
-rw-r--r--board.h25
1 files changed, 14 insertions, 11 deletions
diff --git a/board.h b/board.h
index 30c6dcf..ce5aa8f 100644
--- a/board.h
+++ b/board.h
@@ -20,6 +20,7 @@
#define QUACKLE_BOARD_H
#include <vector>
+#include <bitset>
#include "alphabetparameters.h"
#include "bag.h"
@@ -27,7 +28,9 @@
#include "rack.h"
using namespace std;
-
+
+typedef bitset<QUACKLE_MAXIMUM_ALPHABET_SIZE> LetterBitset;
+
#define QUACKLE_MAXIMUM_BOARD_SIZE LETTER_STRING_MAXIMUM_LENGTH
#define QUACKLE_MINIMUM_BOARD_SIZE 7
@@ -122,11 +125,11 @@ public:
bool isBlank(int row, int col) const;
bool isBritish(int row, int col) const;
- int vcross(int row, int col) const;
- void setVCross(int row, int col, int vcross);
+ const LetterBitset &vcross(int row, int col) const;
+ void setVCross(int row, int col, const LetterBitset &vcross);
- int hcross(int row, int col) const;
- void setHCross(int row, int col, int hcross);
+ const LetterBitset &hcross(int row, int col) const;
+ void setHCross(int row, int col, const LetterBitset &hcross);
protected:
int m_width;
@@ -137,8 +140,8 @@ protected:
bool m_isBlank[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
bool m_isBritish[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
- int m_vcross[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
- int m_hcross[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
+ LetterBitset m_vcross[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
+ LetterBitset m_hcross[QUACKLE_MAXIMUM_BOARD_SIZE][QUACKLE_MAXIMUM_BOARD_SIZE];
inline bool isNonempty(int row, int column) const;
};
@@ -163,22 +166,22 @@ inline bool Board::isBritish(int row, int col) const
return m_isBritish[row][col];
}
-inline int Board::vcross(int row, int col) const
+inline const LetterBitset &Board::vcross(int row, int col) const
{
return m_vcross[row][col];
}
-inline void Board::setVCross(int row, int col, int vcross)
+inline void Board::setVCross(int row, int col, const LetterBitset &vcross)
{
m_vcross[row][col] = vcross;
}
-inline int Board::hcross(int row, int col) const
+inline const LetterBitset &Board::hcross(int row, int col) const
{
return m_hcross[row][col];
}
-inline void Board::setHCross(int row, int col, int hcross)
+inline void Board::setHCross(int row, int col, const LetterBitset &hcross)
{
m_hcross[row][col] = hcross;
}