|
|
|
|
@ -46,8 +46,8 @@ T SwapBE(T in)
|
|
|
|
|
|
|
|
|
|
class LoadHelper { |
|
|
|
|
Uint8 *m_buffer; |
|
|
|
|
Uint32 m_bufferPtr = 0; |
|
|
|
|
Uint32 m_bufferLen; |
|
|
|
|
Uint32 m_cur = 0; |
|
|
|
|
Uint32 m_size; |
|
|
|
|
|
|
|
|
|
template <class T> |
|
|
|
|
T next() |
|
|
|
|
@ -57,8 +57,8 @@ class LoadHelper {
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
T value; |
|
|
|
|
memcpy(&value, &m_buffer[m_bufferPtr], size); |
|
|
|
|
m_bufferPtr += size; |
|
|
|
|
memcpy(&value, &m_buffer[m_cur], size); |
|
|
|
|
m_cur += size; |
|
|
|
|
|
|
|
|
|
return value; |
|
|
|
|
} |
|
|
|
|
@ -66,18 +66,18 @@ class LoadHelper {
|
|
|
|
|
public: |
|
|
|
|
LoadHelper(const char *szFileName) |
|
|
|
|
{ |
|
|
|
|
m_buffer = pfile_read(szFileName, &m_bufferLen); |
|
|
|
|
m_buffer = pfile_read(szFileName, &m_size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool isValid(Uint32 size = 1) |
|
|
|
|
{ |
|
|
|
|
return m_buffer != nullptr |
|
|
|
|
&& m_bufferLen >= (m_bufferPtr + size); |
|
|
|
|
&& m_size >= (m_cur + size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void skip(Uint32 size) |
|
|
|
|
{ |
|
|
|
|
m_bufferPtr += size; |
|
|
|
|
m_cur += size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void nextBytes(void *bytes, size_t size) |
|
|
|
|
@ -85,8 +85,8 @@ public:
|
|
|
|
|
if (!isValid(size)) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
memcpy(bytes, &m_buffer[m_bufferPtr], size); |
|
|
|
|
m_bufferPtr += size; |
|
|
|
|
memcpy(bytes, &m_buffer[m_cur], size); |
|
|
|
|
m_cur += size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <class T> |
|
|
|
|
@ -120,26 +120,26 @@ public:
|
|
|
|
|
class SaveHelper { |
|
|
|
|
const char *m_szFileName; |
|
|
|
|
Uint8 *m_buffer; |
|
|
|
|
Uint32 m_bufferPtr = 0; |
|
|
|
|
Uint32 m_bufferLen; |
|
|
|
|
Uint32 m_cur = 0; |
|
|
|
|
Uint32 m_capacity; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
SaveHelper(const char *szFileName, size_t bufferLen) |
|
|
|
|
{ |
|
|
|
|
m_szFileName = szFileName; |
|
|
|
|
m_bufferLen = bufferLen; |
|
|
|
|
m_buffer = DiabloAllocPtr(codec_get_encoded_len(m_bufferLen)); |
|
|
|
|
m_capacity = bufferLen; |
|
|
|
|
m_buffer = DiabloAllocPtr(codec_get_encoded_len(m_capacity)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool isValid(Uint32 len = 1) |
|
|
|
|
{ |
|
|
|
|
return m_buffer != nullptr |
|
|
|
|
&& m_bufferLen >= (m_bufferPtr + len); |
|
|
|
|
&& m_capacity >= (m_cur + len); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void skip(Uint32 len) |
|
|
|
|
{ |
|
|
|
|
m_bufferPtr += len; |
|
|
|
|
m_cur += len; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void writeBytes(const void *bytes, size_t len) |
|
|
|
|
@ -147,8 +147,8 @@ public:
|
|
|
|
|
if (!isValid(len)) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
memcpy(&m_buffer[m_bufferPtr], bytes, len); |
|
|
|
|
m_bufferPtr += len; |
|
|
|
|
memcpy(&m_buffer[m_cur], bytes, len); |
|
|
|
|
m_cur += len; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <class T> |
|
|
|
|
@ -170,7 +170,7 @@ public:
|
|
|
|
|
if (m_buffer == nullptr) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
pfile_write_save_file(m_szFileName, m_buffer, m_bufferPtr, codec_get_encoded_len(m_bufferPtr)); |
|
|
|
|
pfile_write_save_file(m_szFileName, m_buffer, m_cur, codec_get_encoded_len(m_cur)); |
|
|
|
|
mem_free_dbg(m_buffer); |
|
|
|
|
m_buffer = nullptr; |
|
|
|
|
} |
|
|
|
|
|