From dd6da5864235674e764a50adedfcc7cccc82a711 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sun, 20 Jul 2025 21:39:10 +0200 Subject: [PATCH] decrease file size --- src/Pieces/PiecesFiles.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Pieces/PiecesFiles.cpp b/src/Pieces/PiecesFiles.cpp index f53b644..b6c70cd 100644 --- a/src/Pieces/PiecesFiles.cpp +++ b/src/Pieces/PiecesFiles.cpp @@ -51,11 +51,11 @@ bool PiecesFiles::savePieces(int polyominoSize, std::vector& polyomin buffer << infoByte; const int bitsNeeded = polyomino.getLength() * polyomino.getLength(); - const int longsNeeded = bitsNeeded / 64 + 1; + const int bytesNeeded = bitsNeeded / 8 + 1; // write the positions of the piece - for (int i = 0; i < longsNeeded; i++) { - buffer << polyomino.getPositionsData()[i]; + for (int i = 0; i < bytesNeeded; i++) { + buffer << static_cast(polyomino.getPositionsData()[i/4] >> ((i%4) * 8)); } } @@ -99,6 +99,7 @@ bool PiecesFiles::loadPieces(int polyominoSize, std::vector& pieces, std: constexpr char yMask = 0b0000'1111; std::uint8_t infoByte; + std::uint8_t positionByte; int i = 0; while (!buffer.IsFinished()) { // if (piecesFile.eof()) break; @@ -110,19 +111,20 @@ bool PiecesFiles::loadPieces(int polyominoSize, std::vector& pieces, std: int length = (infoByte & lengthMask); const int bitsNeeded = length * length; - const int longsNeeded = bitsNeeded / 64 + 1; + const int bytesNeeded = bitsNeeded / 8 + 1; // read positions Polyomino::PolyominoData polyominoData{}; - for (int i = 0; i < longsNeeded; i++) { - buffer >> polyominoData[i]; + + for (int j = 0; j < bytesNeeded; j++) { + buffer >> positionByte; + polyominoData[j/4] |= static_cast(positionByte) << ((j%4) * 8); } - // create piece - Piece readPiece(Polyomino(std::move(polyominoData), length), pieceBlock); + pieces.emplace_back(Polyomino(std::move(polyominoData), length), pieceBlock); + nextPieceBlockType(pieceBlock); - - pieces.push_back(readPiece); + if (isConvex) { convexPieces.push_back(i); }