rodecomp/Source/Archive/PakFile.h
ragnarok-clanker a47d20f8be Reconstruct readable C++ and organize cohesive source subsystems
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
2026-10-25 07:42:41 +00:00

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