Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.
Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
#ifndef RAGNAROK_SOURCE_ARCHIVE_PAKFILE_H
|
|
#define RAGNAROK_SOURCE_ARCHIVE_PAKFILE_H
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
#include <windows.h>
|
|
|
|
class CPakFile {
|
|
public:
|
|
virtual ~CPakFile();
|
|
virtual std::uint64_t GetSize() const = 0;
|
|
virtual std::uint8_t* Read(std::uint64_t offset, std::uint32_t length) = 0;
|
|
};
|
|
|
|
namespace myGPack {
|
|
|
|
class CReadPakFile : public CPakFile {
|
|
public:
|
|
CReadPakFile();
|
|
~CReadPakFile() override;
|
|
|
|
std::uint64_t GetSize() const override;
|
|
std::uint8_t* Read(std::uint64_t offset, std::uint32_t length) override;
|
|
void Close();
|
|
|
|
protected:
|
|
/* 0004 */ HANDLE m_handle;
|
|
/* 0008 */ std::uint64_t m_size;
|
|
/* 0010 */ std::vector<std::uint8_t> m_buffer;
|
|
};
|
|
|
|
class CWritePakFile : public CReadPakFile {
|
|
public:
|
|
~CWritePakFile() override;
|
|
|
|
bool Open(const char* filename);
|
|
bool Write(std::uint64_t offset, const void* bytes, std::uint32_t length);
|
|
};
|
|
|
|
}
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(CPakFile) == 4);
|
|
static_assert(sizeof(std::vector<std::uint8_t>) == 12);
|
|
static_assert(sizeof(myGPack::CReadPakFile) == 32);
|
|
static_assert(sizeof(myGPack::CWritePakFile) == 32);
|
|
#endif
|
|
|
|
#endif
|