mirror of
https://github.com/correl/mage.git
synced 2024-11-15 11:09:30 +00:00
Use ThreadLocal StringBuilder for frequently used StringBuilders - saves having to construct new StringBuilder objects
This commit is contained in:
parent
d7c23bbfc0
commit
e131caa453
2 changed files with 49 additions and 4 deletions
|
@ -176,9 +176,10 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
}
|
||||
|
||||
public String getValue(boolean useHidden) {
|
||||
StringBuilder sb = new StringBuilder(1024);
|
||||
StringBuilder sb = threadLocalBuilder.get();
|
||||
|
||||
sb.append(turnNum).append(turn.getPhaseType()).append(turn.getStepType()).append(activePlayerId).append(priorityPlayerId);
|
||||
sb.append(turn.getValue(turnNum));
|
||||
sb.append(activePlayerId).append(priorityPlayerId);
|
||||
|
||||
for (Player player: players.values()) {
|
||||
sb.append("player").append(player.getLife()).append("hand");
|
||||
|
@ -214,9 +215,10 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
}
|
||||
|
||||
public String getValue(boolean useHidden, Game game) {
|
||||
StringBuilder sb = new StringBuilder(1024);
|
||||
StringBuilder sb = threadLocalBuilder.get();
|
||||
|
||||
sb.append(turnNum).append(turn.getPhaseType()).append(turn.getStepType()).append(activePlayerId).append(priorityPlayerId);
|
||||
sb.append(turn.getValue(turnNum));
|
||||
sb.append(activePlayerId).append(priorityPlayerId);
|
||||
|
||||
for (Player player: players.values()) {
|
||||
sb.append("player").append(player.isPassed()).append(player.getLife()).append("hand");
|
||||
|
@ -273,6 +275,22 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
// create a ThreadLocal StringBuilder
|
||||
private transient ThreadLocal<StringBuilder> threadLocalBuilder = new ThreadLocal<StringBuilder>() {
|
||||
@Override
|
||||
protected StringBuilder initialValue() {
|
||||
return new StringBuilder(1024);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuilder get() {
|
||||
StringBuilder b = super.get();
|
||||
b.setLength(0); // clear/reset the buffer
|
||||
return b;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public Players getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
|
|
@ -311,4 +311,31 @@ public class Turn implements Serializable {
|
|||
public Turn copy() {
|
||||
return new Turn(this);
|
||||
}
|
||||
|
||||
public String getValue(int turnNum) {
|
||||
StringBuilder sb = threadLocalBuilder.get();
|
||||
sb.append("[").append(turnNum)
|
||||
.append(":").append(currentPhase.getType())
|
||||
.append(":").append(currentPhase.getStep().getType())
|
||||
.append("]");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
// create a ThreadLocal StringBuilder
|
||||
private transient ThreadLocal<StringBuilder> threadLocalBuilder = new ThreadLocal<StringBuilder>() {
|
||||
@Override
|
||||
protected StringBuilder initialValue() {
|
||||
return new StringBuilder(50);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBuilder get() {
|
||||
StringBuilder b = super.get();
|
||||
b.setLength(0); // clear/reset the buffer
|
||||
return b;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue