Files
dnf-utils/sgutil/sgu_lua_npk_file.h
T
2025-09-04 14:30:09 +08:00

81 lines
2.1 KiB
C++

#pragma once
#include <stdint.h>
#include "libNPK.h"
struct LuaNPKFileItemBaseInfo : public NPK::FileItemBaseInfo
{
const char* c_keyName() const { return keyName.c_str(); }
};
struct LuaNPKFileItemFullInfo : public NPK::FileItemFullInfo
{
const char* c_npkName() const { return npkName.c_str(); }
const char* c_npkBase() const { return npkBase.c_str(); }
const char* c_keyName() const { return keyName.c_str(); }
};
class LuaNPKFileStream
{
public:
const char* name(void) const;
uint32_t size(void) const;
uint32_t read(void* buffer, uint32_t size);
bool seek(uint32_t offset);
uint32_t tell(void) const;
uint32_t crc32(void);
bool isEOF(void) const;
//write total file content to local disk file, wszFileName(utf8)
bool writeToDiskFile(const char* wszFileName);
public:
NPK::IFileStream* m_pFileStream = nullptr;
};
class LuaNPKFileList
{
public:
static LuaNPKFileList* createEmpty();
static void destroy(LuaNPKFileList* instance);
public:
bool loadListFromFile(const char* wszListFile/*utf8*/, const char* prefix, uint32_t flags, bool bEnableDuplicate);
bool dumpToLocalFile(const char* wszListFile/*utf8*/, uint32_t flags);
bool mergeOtherListInto(const LuaNPKFileList* sourceFileList, bool bEnableDuplicate);
bool applyToLocalNPKFiles(const char* wszNPKBase/*utf8*/);
int32_t getFileCounts(void) const;
LuaNPKFileItemFullInfo getFileItemFromIndex(int32_t index) const;
LuaNPKFileItemFullInfo getFileItemFromName(const char* szKeyName) const;
public:
NPK::IFileList* m_pFileList = nullptr;
};
class LuaNPKFile
{
public:
static LuaNPKFile* create();
static void destroy(LuaNPKFile* instance);
public:
bool openPakFile(const char* szPackFileName);
bool closePakFile(void);
int32_t getFileCounts(void) const;
LuaNPKFileList* generateFullInfoList();
LuaNPKFileItemBaseInfo getFileNode(int32_t index) const;
LuaNPKFileStream* openFileStream(const char* szFileName);
void closeFileStream(LuaNPKFileStream* fileStream);
public:
NPK::INPKFile* m_pNPKFile = nullptr;
public:
LuaNPKFile();
~LuaNPKFile();
};
void registerNPKLuaLibs(struct lua_State* L);