1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Refactor sawyercoding

This commit is contained in:
Michał Janiszewski
2016-11-28 10:59:01 +01:00
committed by Ted John
parent 30c61345d8
commit 29a4277709
5 changed files with 21 additions and 14 deletions

View File

@@ -28,6 +28,7 @@
extern "C" {
#include "../openrct2.h"
#include "../platform/platform.h"
#include "../util/sawyercoding.h"
}
#include "network.h"

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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

View File

@@ -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);