1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-28 01:04:50 +01:00

Extract RLE repeat to its own method

This commit is contained in:
Ted John
2017-10-22 12:47:27 +01:00
committed by Michael Steenbeek
parent a737848e8e
commit 1f605db54b
2 changed files with 10 additions and 6 deletions

View File

@@ -142,13 +142,8 @@ size_t SawyerChunkReader::DecodeChunk(void * dst, size_t dstCapacity, const void
resultLength = DecodeChunkRLE(dst, dstCapacity, src, header.length);
break;
case CHUNK_ENCODING_RLECOMPRESSED:
{
auto immBufferLength = MAX_UNCOMPRESSED_CHUNK_SIZE;
auto immBuffer = std::make_unique<uint8[]>(immBufferLength);
auto immLength = DecodeChunkRLE(immBuffer.get(), immBufferLength, src, header.length);
resultLength = DecodeChunkRepeat(dst, dstCapacity, immBuffer.get(), immLength);
resultLength = DecodeChunkRLERepeat(dst, dstCapacity, src, header.length);
break;
}
case CHUNK_ENCODING_ROTATE:
resultLength = DecodeChunkRotate(dst, dstCapacity, src, header.length);
break;
@@ -158,6 +153,14 @@ size_t SawyerChunkReader::DecodeChunk(void * dst, size_t dstCapacity, const void
return resultLength;
}
size_t SawyerChunkReader::DecodeChunkRLERepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength)
{
auto immBufferLength = MAX_UNCOMPRESSED_CHUNK_SIZE;
auto immBuffer = std::make_unique<uint8[]>(immBufferLength);
auto immLength = DecodeChunkRLE(immBuffer.get(), immBufferLength, src, srcLength);
return DecodeChunkRepeat(dst, dstCapacity, immBuffer.get(), immLength);
}
size_t SawyerChunkReader::DecodeChunkRLE(void * dst, size_t dstCapacity, const void * src, size_t srcLength)
{
auto src8 = static_cast<const uint8 *>(src);

View File

@@ -73,6 +73,7 @@ public:
private:
static size_t DecodeChunk(void * dst, size_t dstCapacity, const void * src, const sawyercoding_chunk_header &header);
static size_t DecodeChunkRLERepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength);
static size_t DecodeChunkRLE(void * dst, size_t dstCapacity, const void * src, size_t srcLength);
static size_t DecodeChunkRepeat(void * dst, size_t dstCapacity, const void * src, size_t srcLength);
static size_t DecodeChunkRotate(void * dst, size_t dstCapacity, const void * src, size_t srcLength);