PiecePtr IPiece::createPiece(Type type, Color color, Square square) { switch(type) { case PAWN: return PiecePtr(new Pawn(color, square)); default :return PiecePtr(new NullPiece(color, square)); } }
PiecePtr IPiece::createPiece(char symbol, Square square) { switch (symbol) { case 'P': return PiecePtr(new Pawn(WHITE, square)); case 'p': return PiecePtr(new Pawn(BLACK, square)); default :return PiecePtr(new NullPiece(WHITE, square)); } }
BitCache::PiecePtr BitCache::FetchNewPiece() { if (cache_piece_.size() > max_cache_pieces_) { CachePiece::iterator it = GetOldestPiece(); if (it != cache_piece_.end()) { PiecePtr result = it->second; cache_piece_.erase(it); result->Clear(); return result; } } return PiecePtr(new BitPiece(piece_length_)); }