[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kajongg/sid] src: Tile: only accept bytes, not string or unicode
From: Wolfgang Rohdewald <wolfgang () rohdewald ! de>
Date: 2013-10-31 21:21:11
Message-ID: E1Vbzfz-0002lj-Nm () scm ! kde ! org
[Download RAW message or body]
Git commit 1cb13391aca7bf3f19ee9671d1b6a0597874a29c by Wolfgang Rohdewald.
Committed on 31/10/2013 at 11:10.
Pushed by wrohdewald into branch 'sid'.
Tile: only accept bytes, not string or unicode
makes it faster: For python3, string/unicode would explicitly have to be converted to \
bytes other parts of kajongg might still use str instead of bytes, probably Hand
M +1 -1 src/board.py
M +1 -1 src/game.py
M +2 -2 src/hand.py
M +5 -5 src/handboard.py
M +1 -1 src/meld.py
M +3 -3 src/player.py
M +2 -2 src/server.py
M +25 -20 src/tile.py
M +2 -2 src/uitile.py
M +1 -1 src/uiwall.py
M +2 -2 src/visible.py
M +1 -1 src/wall.py
http://commits.kde.org/kajongg/1cb13391aca7bf3f19ee9671d1b6a0597874a29c
diff --git a/src/board.py b/src/board.py
index 3c86a4b..f0ad453 100644
--- a/src/board.py
+++ b/src/board.py
@@ -222,7 +222,7 @@ class Board(QGraphicsRectItem):
if uiTile is self._focusTile:
return
if uiTile:
- assert uiTile.tile != 'Xy', uiTile
+ assert uiTile.tile != b'Xy', uiTile
if not isinstance(uiTile.board, DiscardBoard):
assert uiTile.focusable, uiTile
self.__prevPos = uiTile.sortKey()
diff --git a/src/game.py b/src/game.py
index 687cfe7..ac5b9e9 100644
--- a/src/game.py
+++ b/src/game.py
@@ -756,7 +756,7 @@ class PlayingGame(Game):
# we are human and server tells us another player discarded a tile. In \
our
# game instance, tiles in handBoards of other players are unknown
player.makeTileKnown(tileName)
- result = 'Xy'
+ result = b'Xy'
else:
result = tileName
if not tileName in player.concealedTileNames:
diff --git a/src/hand.py b/src/hand.py
index 6907006..7527637 100644
--- a/src/hand.py
+++ b/src/hand.py
@@ -246,7 +246,7 @@ class Hand(object):
self.score = self.__totalScore()
# do the rest only if we know all tiles of the hand
- if 'Xy' in self.string:
+ if b'Xy' in self.string:
self.won = False # we do not know better
return
if self.won:
@@ -522,7 +522,7 @@ class Hand(object):
Adds melds to self.melds.
only one special mjRule may try to rearrange melds.
A rest will be rearranged by standard rules."""
- if 'Xy' in rest:
+ if b'Xy' in rest:
# hidden tiles of other players:
self.melds.extend(self.splitRegex(rest))
return
diff --git a/src/handboard.py b/src/handboard.py
index d21d4dd..b6a6994 100644
--- a/src/handboard.py
+++ b/src/handboard.py
@@ -49,13 +49,13 @@ class TileAttr(object):
if yoffset == 0:
self.dark = self.tile.istitle()
else:
- self.dark = self.tile == 'Xy' or scoring
+ self.dark = self.tile == b'Xy' or scoring
self.focusable = True
if scoring:
self.focusable = idx == 0
else:
self.focusable = (not self.tile.isBonus()
- and self.tile != 'Xy'
+ and self.tile != b'Xy'
and player == player.game.activePlayer
and player == player.game.myself
and (meld.state == CONCEALED
@@ -213,8 +213,8 @@ class HandBoard(Board):
assert isinstance(newPosition.tile, Tile)
matches = oldTiles.get(newPosition.tile) \
or oldTiles.get(newPosition.tile.swapTitle()) \
- or oldTiles.get('Xy')
- if not matches and newPosition.tile == 'Xy':
+ or oldTiles.get(b'Xy')
+ if not matches and newPosition.tile == b'Xy':
matches = oldTiles.values()[0]
if matches:
# no matches happen when we move a uiTile within a board,
@@ -527,7 +527,7 @@ class PlayingHandBoard(HandBoard):
result = list(Meld(x) for x in content.sortedMeldsContent.split())
if result:
if self.rearrangeMelds:
- if result[0][0] == 'Xy':
+ if result[0][0] == b'Xy':
result = sorted(result, key=len, reverse=True)
else:
# generate one meld with all sorted tiles
diff --git a/src/meld.py b/src/meld.py
index 03557bc..e65077f 100644
--- a/src/meld.py
+++ b/src/meld.py
@@ -191,7 +191,7 @@ class Meld(list):
"""compute meld type. Except knitting melds."""
# pylint: disable=too-many-branches, R0911
# too many branches, too many returns
- if 'Xy' in self:
+ if b'Xy' in self:
return REST
length = len(self)
if not length:
diff --git a/src/player.py b/src/player.py
index 89ced5f..6ba0085 100644
--- a/src/player.py
+++ b/src/player.py
@@ -360,7 +360,7 @@ class Player(object):
def makeTileKnown(self, tileName):
"""used when somebody else discards a tile"""
- assert self._concealedTileNames[0] == 'Xy'
+ assert self._concealedTileNames[0] == b'Xy'
self._concealedTileNames[0] = tileName
self._hand = None
@@ -615,7 +615,7 @@ class PlayingPlayer(Player):
assert len(tileNames) <= len(self._concealedTileNames), \
'%s: showConcealedTiles %s, we have only %s' % (self, tileNames, \
self._concealedTileNames) for tileName in tileNames:
- src, dst = ('Xy', tileName) if show else (tileName, 'Xy')
+ src, dst = (b'Xy', tileName) if show else (tileName, b'Xy')
assert src != dst, (self, src, dst, tileNames, \
self._concealedTileNames) if not src in self._concealedTileNames:
logException( '%s: showConcealedTiles(%s): %s not in %s.' % \
@@ -673,7 +673,7 @@ class PlayingPlayer(Player):
"""do we compute the same score as the server does?"""
if score is None:
return True
- if 'Xy' in self._concealedTileNames:
+ if b'Xy' in self._concealedTileNames:
return True
if str(self.hand) == score:
return True
diff --git a/src/server.py b/src/server.py
index 3c610d6..c57132b 100644
--- a/src/server.py
+++ b/src/server.py
@@ -474,7 +474,7 @@ class ServerTable(Table):
if tile.isBonus() or self.game.playOpen:
block.tellOthers(player, Message.PickedTile, tile=tile, \
deadEnd=deadEnd) else:
- block.tellOthers(player, Message.PickedTile, tile= 'Xy', \
deadEnd=deadEnd) + block.tellOthers(player, Message.PickedTile, tile= \
b'Xy', deadEnd=deadEnd) block.callback(self.moved)
def pickKongReplacement(self, requests=None):
@@ -561,7 +561,7 @@ class ServerTable(Table):
if player == clientPlayer or self.game.playOpen:
tileNames = player.concealedTileNames
else:
- tileNames = tuple(Tile('Xy') for x in range(0, 13))
+ tileNames = tuple(Tile(b'Xy') for x in range(0, 13))
block.tell(player, clientPlayer, Message.SetConcealedTiles,
tiles=tileNames + player.bonusTiles)
block.callback(self.dealt)
diff --git a/src/tile.py b/src/tile.py
index 1ba4271..9b0105e 100644
--- a/src/tile.py
+++ b/src/tile.py
@@ -31,13 +31,19 @@ class Tile(bytes):
"""a single tile"""
# pylint: disable=too-many-public-methods, abstract-class-not-used
- def __new__(cls, element):
- if element.__class__.__name__ == 'UITile':
- element = element.tile
- if len(element) == 1 and isinstance(element[0], Tile):
- element = element[0]
- assert len(element) == 2, '%s:%s' % (type(element), element)
- return bytes.__new__(cls, element.encode('utf-8'))
+ def __new__(cls, *args):
+ arg0 = args[0]
+ if len(args) == 1:
+ if arg0.__class__.__name__ == 'UITile':
+ return bytes.__new__(cls, arg0.tile)
+ elif len(arg0) == 1 and isinstance(arg0[0], Tile):
+ return bytes.__new__(cls, arg0[0])
+ else:
+ assert len(arg0) == 2, '%s:%s' % (type(arg0), arg0)
+ return bytes.__new__(cls, arg0)
+ else:
+ assert len(args) == 2, args
+ return bytes.__new__(cls, arg0 + args[1])
def group(self):
"""group as string"""
@@ -126,29 +132,28 @@ class Elements(object):
# too many attributes
def __init__(self):
self.occurrence = IntDict() # key: db, s3 etc. value: occurrence
- self.winds = Tileset(['we', 'ws', 'ww', 'wn'])
- self.wINDS = Tileset(['We', 'Ws', 'Ww', 'Wn'])
- self.dragons = Tileset(['db', 'dg', 'dr'])
- self.dRAGONS = Tileset(['Db', 'Dg', 'Dr'])
+ self.winds = Tileset([b'we', b'ws', b'ww', b'wn'])
+ self.wINDS = Tileset([b'We', b'Ws', b'Ww', b'Wn'])
+ self.dragons = Tileset([b'db', b'dg', b'dr'])
+ self.dRAGONS = Tileset([b'Db', b'Dg', b'Dr'])
self.honors = self.winds | self.dragons
self.hONORS = self.wINDS | self.dRAGONS
- self.terminals = Tileset(['s1', 's9', 'b1', 'b9', 'c1', 'c9'])
- self.tERMINALS = Tileset(['S1', 'S9', 'B1', 'B9', 'C1', 'C9'])
+ self.terminals = Tileset([b's1', b's9', b'b1', b'b9', b'c1', b'c9'])
+ self.tERMINALS = Tileset([b'S1', b'S9', b'B1', b'B9', b'C1', b'C9'])
self.majors = self.honors | self.terminals
self.mAJORS = self.hONORS | self.tERMINALS
self.minors = Tileset()
self.mINORS = Tileset()
- self.greenHandTiles = Tileset(['dg', 'b2', 'b3', 'b4', 'b6', 'b8'])
- for group in 'sbc':
- for value in '2345678':
- self.minors.add(Tile('%s%s' % (group, value)))
+ self.greenHandTiles = Tileset([b'dg', b'b2', b'b3', b'b4', b'b6', b'b8'])
+ for group in b'sbc':
+ for value in b'2345678':
+ self.minors.add(Tile(group, value))
for tile in self.majors:
self.occurrence[tile] = 4
for tile in self.minors:
self.occurrence[tile] = 4
- for bonus in 'fy':
- for wind in 'eswn':
- self.occurrence[Tile('%s%s' % (bonus, wind))] = 1
+ for bonus in b'fe', b'fs', b'fw', b'fn', b'ye', b'ys', b'yw', b'yn':
+ self.occurrence[Tile(bonus)] = 1
def __filter(self, ruleset):
"""returns element names"""
diff --git a/src/uitile.py b/src/uitile.py
index ff52b82..96ce58d 100644
--- a/src/uitile.py
+++ b/src/uitile.py
@@ -118,7 +118,7 @@ class UITile(QGraphicsObject):
moving += ZValues.moving
self.setZValue(moving + \
boardLevel + \
- (self.level+(2 if self.tile != 'Xy' else 1))*ZValues.itemLevelFactor + \
+ (self.level+(2 if self.tile != b'Xy' else 1))*ZValues.itemLevelFactor + \
\ self.__lightDistance())
def boundingRect(self):
@@ -135,7 +135,7 @@ class UITile(QGraphicsObject):
def showFace(self):
"""should we show face for this tile?"""
- return self.tile != 'Xy'
+ return self.tile != b'Xy'
def __elementId(self):
"""returns the SVG element id of the tile"""
diff --git a/src/uiwall.py b/src/uiwall.py
index 8afe6a4..4d6f3c6 100644
--- a/src/uiwall.py
+++ b/src/uiwall.py
@@ -158,7 +158,7 @@ class UIWall(Wall):
"""builds the wall without dividing"""
# recycle used tiles
for uiTile in self.tiles:
- uiTile.tile = Tile('Xy')
+ uiTile.tile = Tile(b'Xy')
uiTile.dark = True
# field = Internal.field
# animateBuild = not field.game.isScoringGame() and not \
self.game.isFirstHand()
diff --git a/src/visible.py b/src/visible.py
index 0d211b2..0b4bb0f 100644
--- a/src/visible.py
+++ b/src/visible.py
@@ -161,8 +161,8 @@ class VisiblePlayingPlayer(PlayingPlayer):
def makeTileKnown(self, tile):
"""give an Xy tileItem a name"""
PlayingPlayer.makeTileKnown(self, tile)
- assert tile != 'Xy'
- matchingTiles = sorted(self.handBoard.tilesByElement('Xy'), key=lambda \
x:x.xoffset) + assert tile != b'Xy'
+ matchingTiles = sorted(self.handBoard.tilesByElement(b'Xy'), key=lambda \
x:x.xoffset) matchingTiles[-1].tile = tile
def exposeMeld(self, meldTiles, calledTile=None):
diff --git a/src/wall.py b/src/wall.py
index 8dceca3..9fb28bf 100644
--- a/src/wall.py
+++ b/src/wall.py
@@ -60,7 +60,7 @@ class Wall(object):
def __init__(self, game):
"""init and position the wall"""
self._game = weakref.ref(game) # avoid cycles for garbage collection
- self.tiles = [self.tileClass('Xy') for _ in \
range(elements.count(game.ruleset))] + self.tiles = [self.tileClass(b'Xy') for \
_ in range(elements.count(game.ruleset))] self.living = None
self.kongBox = self.kongBoxClass()
assert len(self.tiles) % 8 == 0
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic