summaryrefslogtreecommitdiff
path: root/server/hand.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-12-02 05:05:29 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-12-02 05:05:29 +0100
commitdc291de04681fa78a949b9aa8eb5f8f29b0f9f0e (patch)
tree33ea596545c4f9cbc66787f15bdae8b94f038439 /server/hand.cpp
parentbe2a1877e3412095c3bfca3ad9ce36721e4c9fe9 (diff)
Changed Hand::eat_-functions to return a bool, so a failure can be distinguished from a depleted list of tiles.
Diffstat (limited to 'server/hand.cpp')
-rw-r--r--server/hand.cpp86
1 files changed, 44 insertions, 42 deletions
diff --git a/server/hand.cpp b/server/hand.cpp
index abdeb4b..07777fb 100644
--- a/server/hand.cpp
+++ b/server/hand.cpp
@@ -13,11 +13,12 @@ bool Hand::basic_format(const Tiles& tiles, bool pair_eaten) {
return true; // All tiles eaten.
}
+ Tiles rest;
+
if(!pair_eaten) {
- if(Tiles rest = eat_pair(tiles)) {
- if(basic_format(rest, true)) {
- return true;
- }
+ rest = tiles;
+ if(eat_pair(rest) && basic_format(rest, true)) {
+ return true;
}
}
@@ -25,14 +26,14 @@ bool Hand::basic_format(const Tiles& tiles, bool pair_eaten) {
return false;
}
- if(Tiles rest = eat_pon(tiles)) {
- if(basic_format(rest, pair_eaten)) {
- return true;
- }
+ rest = tiles;
+ if(eat_pon(rest) && basic_format(rest, pair_eaten)) {
+ return true;
}
- if(Tiles rest = eat_chi(tiles)) {
- return basic_format(rest, pair_eaten);
+ rest = tiles;
+ if(eat_chi(rest) && basic_format(rest, pair_eaten)) {
+ return true;
}
return false;
@@ -43,8 +44,11 @@ bool Hand::basic_format_tenpai(const Tiles& tiles, bool pair_eaten, bool wait_ea
return true;
}
+ Tiles rest;
+
if(!pair_eaten && !wait_eaten) {
- if(basic_format_tenpai(eat_tanki(tiles), true, true)) {
+ rest = tiles;
+ if(eat_tanki(rest) && basic_format_tenpai(rest, true, true)) {
return true;
}
}
@@ -54,18 +58,16 @@ bool Hand::basic_format_tenpai(const Tiles& tiles, bool pair_eaten, bool wait_ea
}
if(!pair_eaten) {
- if(Tiles rest = eat_pair(tiles)) {
- if(basic_format_tenpai(rest, true, wait_eaten)) {
- return true;
- }
+ rest = tiles;
+ if(eat_pair(rest) && basic_format_tenpai(rest, true, wait_eaten)) {
+ return true;
}
}
if(!wait_eaten) {
- if(Tiles rest = eat_chi_wait(tiles)) {
- if(basic_format_tenpai(rest, pair_eaten, true)) {
- return true;
- }
+ rest = tiles;
+ if(eat_chi_wait(rest) && basic_format_tenpai(rest, pair_eaten, true)) {
+ return true;
}
}
@@ -73,30 +75,30 @@ bool Hand::basic_format_tenpai(const Tiles& tiles, bool pair_eaten, bool wait_ea
return false;
}
- if(Tiles rest = eat_pon(tiles)) {
- if(basic_format_tenpai(rest, pair_eaten, wait_eaten)) {
- return true;
- }
+ rest = tiles;
+ if(eat_pon(rest) && basic_format_tenpai(rest, pair_eaten, wait_eaten)) {
+ return true;
}
- if(Tiles rest = eat_chi(tiles)) {
- return basic_format_tenpai(rest, pair_eaten, wait_eaten);
+ rest = tiles;
+ if(eat_chi(rest) && basic_format_tenpai(rest, pair_eaten, wait_eaten)) {
+ return true;
}
return false;
}
-Tiles Hand::eat_tanki(Tiles tiles) {
+bool Hand::eat_tanki(Tiles& tiles) {
tiles.erase(tiles.begin());
- return tiles;
+ return true;
}
-Tiles Hand::eat_chi_wait(Tiles tiles) {
+bool Hand::eat_chi_wait(Tiles& tiles) {
Tile::Set set = tiles.front().get_set();
int num = tiles.front().get_num();
if(set == Tile::Honor || num > 8) {
- return Tiles();
+ return false;
}
// Look for T+1.
@@ -104,7 +106,7 @@ Tiles Hand::eat_chi_wait(Tiles tiles) {
if(it != tiles.end()) {
tiles.erase(it);
tiles.erase(tiles.begin());
- return tiles;
+ return true;
}
if(num > 7) {
@@ -116,35 +118,35 @@ Tiles Hand::eat_chi_wait(Tiles tiles) {
if(it != tiles.end()) {
tiles.erase(it);
tiles.erase(tiles.begin());
- return tiles;
+ return true;
}
- return Tiles();
+ return false;
}
-Tiles Hand::eat_pair(Tiles tiles) {
+bool Hand::eat_pair(Tiles& tiles) {
if(tiles[0] == tiles[1]) {
tiles.erase(tiles.begin(), tiles.begin() + 2);
- return tiles;
+ return true;
}
- return Tiles();
+ return false;
}
-Tiles Hand::eat_pon(Tiles tiles) {
+bool Hand::eat_pon(Tiles& tiles) {
if(tiles[0] == tiles[2]) {
tiles.erase(tiles.begin(), tiles.begin() + 3);
- return tiles;
+ return true;
}
- return Tiles();
+ return false;
}
-Tiles Hand::eat_chi(Tiles tiles) {
+bool Hand::eat_chi(Tiles& tiles) {
Tile::Set set = tiles.front().get_set();
int num = tiles.front().get_num();
if(set == Tile::Honor || num > 7) {
// Can't be chi-ed.
- return Tiles();
+ return false;
}
Tiles::iterator it1 = std::find(tiles.begin(), tiles.end(), Tile(set, num + 1));
@@ -155,10 +157,10 @@ Tiles Hand::eat_chi(Tiles tiles) {
tiles.erase(it2);
tiles.erase(it1);
tiles.erase(tiles.begin());
- return tiles;
+ return true;
}
}
- return Tiles();
+ return false;
}