mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 03:23:15 +01:00
Refactor sawyercoding
This commit is contained in:
committed by
Ted John
parent
30c61345d8
commit
29a4277709
@@ -28,6 +28,7 @@
|
||||
extern "C" {
|
||||
#include "../openrct2.h"
|
||||
#include "../platform/platform.h"
|
||||
#include "../util/sawyercoding.h"
|
||||
}
|
||||
|
||||
#include "network.h"
|
||||
|
||||
@@ -28,6 +28,8 @@ static size_t encode_chunk_rle(const uint8 *src_buffer, uint8 *dst_buffer, size_
|
||||
static size_t encode_chunk_repeat(const uint8 *src_buffer, uint8 *dst_buffer, size_t length);
|
||||
static void encode_chunk_rotate(uint8 *buffer, size_t length);
|
||||
|
||||
bool gUseRLE = true;
|
||||
|
||||
uint32 sawyercoding_calculate_checksum(const uint8* buffer, size_t length)
|
||||
{
|
||||
size_t i;
|
||||
@@ -138,24 +140,29 @@ size_t sawyercoding_read_chunk_with_size(SDL_RWops* rw, uint8 *buffer, const siz
|
||||
}
|
||||
|
||||
// Decode chunk data
|
||||
size_t data_size = sawyercoding_read_chunk_buffer(buffer, src_buffer, chunkHeader, buffer_size);
|
||||
free(src_buffer);
|
||||
return data_size;
|
||||
}
|
||||
|
||||
size_t sawyercoding_read_chunk_buffer(uint8 *dst_buffer, const uint8 *src_buffer, sawyercoding_chunk_header chunkHeader, size_t dst_buffer_size) {
|
||||
switch (chunkHeader.encoding) {
|
||||
case CHUNK_ENCODING_NONE:
|
||||
assert(chunkHeader.length <= buffer_size);
|
||||
memcpy(buffer, src_buffer, chunkHeader.length);
|
||||
assert(chunkHeader.length <= dst_buffer_size);
|
||||
memcpy(dst_buffer, src_buffer, chunkHeader.length);
|
||||
break;
|
||||
case CHUNK_ENCODING_RLE:
|
||||
chunkHeader.length = (uint32)decode_chunk_rle_with_size(src_buffer, buffer, chunkHeader.length, buffer_size);
|
||||
chunkHeader.length = (uint32)decode_chunk_rle_with_size(src_buffer, dst_buffer, chunkHeader.length, dst_buffer_size);
|
||||
break;
|
||||
case CHUNK_ENCODING_RLECOMPRESSED:
|
||||
chunkHeader.length = (uint32)decode_chunk_rle_with_size(src_buffer, buffer, chunkHeader.length, buffer_size);
|
||||
chunkHeader.length = (uint32)decode_chunk_repeat(buffer, chunkHeader.length);
|
||||
chunkHeader.length = (uint32)decode_chunk_rle_with_size(src_buffer, dst_buffer, chunkHeader.length, dst_buffer_size);
|
||||
chunkHeader.length = (uint32)decode_chunk_repeat(dst_buffer, chunkHeader.length);
|
||||
break;
|
||||
case CHUNK_ENCODING_ROTATE:
|
||||
memcpy(buffer, src_buffer, chunkHeader.length);
|
||||
decode_chunk_rotate(buffer, chunkHeader.length);
|
||||
memcpy(dst_buffer, src_buffer, chunkHeader.length);
|
||||
decode_chunk_rotate(dst_buffer, chunkHeader.length);
|
||||
break;
|
||||
}
|
||||
free(src_buffer);
|
||||
return chunkHeader.length;
|
||||
}
|
||||
|
||||
@@ -164,7 +171,7 @@ size_t sawyercoding_read_chunk_with_size(SDL_RWops* rw, uint8 *buffer, const siz
|
||||
* rct2: 0x006762E1
|
||||
*
|
||||
*/
|
||||
size_t sawyercoding_write_chunk_buffer(uint8 *dst_file, uint8* buffer, sawyercoding_chunk_header chunkHeader){
|
||||
size_t sawyercoding_write_chunk_buffer(uint8 *dst_file, const uint8* buffer, sawyercoding_chunk_header chunkHeader) {
|
||||
uint8 *encode_buffer, *encode_buffer2;
|
||||
|
||||
if (gUseRLE == false) {
|
||||
|
||||
@@ -28,6 +28,8 @@ typedef struct sawyercoding_chunk_header {
|
||||
assert_struct_size(sawyercoding_chunk_header, 5);
|
||||
#pragma pack(pop)
|
||||
|
||||
extern bool gUseRLE;
|
||||
|
||||
enum {
|
||||
CHUNK_ENCODING_NONE,
|
||||
CHUNK_ENCODING_RLE,
|
||||
@@ -52,7 +54,8 @@ uint32 sawyercoding_calculate_checksum(const uint8* buffer, size_t length);
|
||||
bool sawyercoding_read_chunk_safe(SDL_RWops *rw, void *dst, size_t dstLength);
|
||||
bool sawyercoding_skip_chunk(SDL_RWops *rw);
|
||||
size_t sawyercoding_read_chunk_with_size(SDL_RWops* rw, uint8 *buffer, const size_t buffer_size);
|
||||
size_t sawyercoding_write_chunk_buffer(uint8 *dst_file, uint8* buffer, sawyercoding_chunk_header chunkHeader);
|
||||
size_t sawyercoding_read_chunk_buffer(uint8 *dst_buffer, const uint8 *src_buffer, sawyercoding_chunk_header chunkHeader, size_t dst_buffer_size);
|
||||
size_t sawyercoding_write_chunk_buffer(uint8 *dst_file, const uint8 *src_buffer, sawyercoding_chunk_header chunkHeader);
|
||||
size_t sawyercoding_decode_sv4(const uint8 *src, uint8 *dst, size_t length, size_t bufferLength);
|
||||
size_t sawyercoding_decode_sc4(const uint8 *src, uint8 *dst, size_t length, size_t bufferLength);
|
||||
size_t sawyercoding_encode_sv4(const uint8 *src, uint8 *dst, size_t length);
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
#include "util.h"
|
||||
#include "zlib.h"
|
||||
|
||||
bool gUseRLE = true;
|
||||
|
||||
int squaredmetres_to_squaredfeet(int squaredMetres)
|
||||
{
|
||||
// 1 metre squared = 10.7639104 feet squared
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
|
||||
#include "../common.h"
|
||||
|
||||
extern bool gUseRLE;
|
||||
|
||||
int squaredmetres_to_squaredfeet(int squaredMetres);
|
||||
int metres_to_feet(int metres);
|
||||
int mph_to_kmph(int mph);
|
||||
|
||||
Reference in New Issue
Block a user